關於http 請求的同步與異步調用

這是一個常見的問題,也是一個容易搞混的問題。這裏先說明我個人判斷同步請求還是異步請求的依據:所調用的請求(某個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同步測試結束");
	}

執行結果:

2.還有不同程序語言實現的http請求,要更具實際情況來判斷是同步還是異步。

2.1 java http 異步請求庫:

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章