欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于http 请求的同步与异步调用

程序员文章站 2024-02-22 15:08:10
...

这是一个常见的问题,也是一个容易搞混的问题。这里先说明我个人判断同步请求还是异步请求的依据:所调用的请求(某个url),阻塞了后续代码的执行则为同步,反之则为异步。

同步与异步的概念:

同步、异步常常用来描述一次方法调用过程。

同步:方法一旦调用,调用者必须等待方法的返回结果后才能进行后续的操作。

异步:调用者不必等待方法的返回结果,也能进行后续的操作。而,异步方法通常会在另外一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工作。

几种常见情况的说明:

1.html中的a标签与ajax 请求

a. <a href='url'>xx</a> 这种写法产生的网络请求可以认为是异步的,但是没意义,因为a标签是个请求链接,点击之后网页跳转。测试 window.location.href='url'(a标签的js 实现),结果是异步的。

	// 按标签同步
	function a_tb(){
		tips.val("a标签同步测试");
		window.location.href="ht";
		alert("看不出来同步的效果,调用者也没有阻塞");//姑且认为是一种 异步
		tips.val(tips.val()+" \n测试结束");
		
	}

b.ajax 请求既可以同步也可以异步,关键在于async 参数的配置--true 异步,false 同步。

//  ajax 默认异步方法调用
	function ajax_tb(){
		tips.val("ajax 同步测试");
		$.ajax({
			"url":"ht",
			//"type":"GET",
			"type":"POST",
			"success":function(text){
				tips.val(tips.val()+"\n调用返回结果:"+text);
			},
			"error":function(text){
			
			},
			"async":false//设置同步请求
		});
		tips.val(tips.val()+"\najax同步测试结束");
	}

执行结果:

关于http 请求的同步与异步调用

2.还有不同程序语言实现的http请求,要更具实际情况来判断是同步还是异步。

2.1 java http 异步请求库:

<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpasyncclient</artifactId>
            <version>4.1.1</version>
</dependency>