首頁  >  文章  >  後端開發  >  同步請求和非同步請求的區別詳解

同步請求和非同步請求的區別詳解

小云云
小云云原創
2018-03-21 13:12:457660瀏覽

先解釋一下同步和非同步的概念
同步是指:發送方發出資料後,等接收方發迴回應以後才發下一個資料包的通訊方式。 異步是指:發送方發出資料後,不等接收方發迴回應,接著發送下個資料包的通訊方式。
同步通訊方式與非同步通訊的概念
同步通訊方式要求通訊雙方以相同的時脈頻率進行,而且準確協調,透過共享單一時脈或定時脈衝源保證發送方和接收方的準確同步,效率較高;
非同步通訊方式不要求雙方同步,收發方可採用各自的時鐘來源,雙方遵循非同步的通訊協議,以字元為資料傳輸單位,發送方傳送字元的時間間隔不確定,發送效率比同步傳送效率低。
使用者用於呼叫WEB服務的通訊選擇:同步或非同步。
使用者可以同步或非同步實作服務呼叫。從使用者的觀點來看,這兩種方式的不同之處在於:
同步-使用者透過單一執行緒呼叫服務;該執行緒發送請求,在服務運行時阻塞,並且等待回應。
非同步-使用者透過兩個執行緒呼叫服務;一個執行緒傳送請求,而另一個單獨的執行緒接收回應。
術語同步 和非同步 經常與順序 和並發 混淆了。後面的這兩個術語與執行單獨的任務必須遵循的順序有關,而同步和非同步 與執行緒執行單一任務(如呼叫單一服務)的方式有關。理解同步和非同步呼叫之間的不同的一種很好的方法是考慮崩潰恢復的後果:
同步——如果用戶在服務運行的過程中阻塞時崩潰了,當它重新啟動時,將無法重新連接到正在進行的調用,所以響應丟失了。用戶必須重複呼叫過程,並且期望這次不會崩潰。
非同步-如果使用者在發送了請求之後等待回應時崩潰了,當它重新啟動時,可以繼續等待回應,所以回應不會遺失。
崩潰恢復不是同步和非同步呼叫之間的唯一不同,但是如果您嘗試確定某個呼叫採用哪一種方式,請考慮每一種呼叫如何處理崩潰恢復,這通常可以給您一個很好的答案.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++
在Java Web 開發中使用Ajax 時,重要的是完整瞭解同步和非同步通訊模型的差異(請參閱參考資料)。對非同步通訊模型支援的缺乏,會對客戶端開發、與 Web 框架的整合、標記庫的使用、IDE 的使用以及執行緒的行為有影響。
在同步請求/回應通訊模型中,總是瀏覽器(與 Web 伺服器、應用伺服器或 Web 應用程式相對)發起請求(透過 Web 使用者)。接著,Web 伺服器、應用程式伺服器或 Web 應用程式會回應進入的請求。在處理同步請求/回應對期間,使用者不能繼續使用瀏覽器。
在非同步請求/回應通訊模型中,瀏覽器(透過 Web 使用者)到 Web 伺服器、應用伺服器或 Web 應用程式的通訊(以及反過來)是解耦的。在非同步請求/回應對的處理中,Web 使用者在目前非同步請求被處理時也可以繼續使用瀏覽器。一旦非同步請求處理完成,非同步回應就會被通訊(從 Web 伺服器、應用伺服器或 Web 應用程式)回客戶機頁面。典型情況下,在這個過程中,呼叫對 Web 使用者沒有影響;他們不需要等待回應。
Jquery ajax 中提交資料可以用同步與非同步1、同步與非同步之間究竟有什麼不同呢? 、2、在什麼情況下使用呢? 同步:提交請求->等待伺服器處理->處理完畢返回這個期間客戶端瀏覽器不能幹任何事
異步: 請求透過事件觸發->伺服器處理(這是瀏覽器仍然可以作其他事情)->處理完畢一、我的理解: 1、一心一意:目前只能做一件事,其他事情必須等當前的事情完成,才能繼續後面的事情。 2.三心二意:同時可以做多件事情:左手按著空白鍵,右手可以不斷的擊打滑鼠,眼睛還要同時看著螢幕,很辛苦。 二、請看下面這段腳本: function

ValidateClick()
{ var areaNo=$("#<%=drpList.ClientID %>").val(); if(areaNo) { alert("请选择"); return false; } $.ajax({
cache:"False",
type:"POST", (A)//async: false, 【(A)】
url:"Validate.ashx",
data:$("#form1").serialize(), 
success:function(o)
{ 
if(o=="ERROR") { alert("输入错误!"); return false;} 
else if(o=="OK")
{ alert("正确!");return true; } 
else
{ alert("其他错误!"); return false;}
},
error:function(xhr, ajaxOptions, thrownError)
{ alert("网络异常,稍后重试!"); return false; }
}); // 【(B) 】 //alert("这里");return true;}

 在(A)處:預設未true,表示使用非同步進行傳輸, 當async: true時:我們把資料用POST提交資料到url頁面後,會同時執行【(B) 】處的方法或函數等,不管(A)處是否已經返回結果,(B)已經執行了,當(A)中返回結果時,就根據指定的if來彈出提示, 當async: false時:這個時候就必須等待(A)處回傳結果,再執行if判斷語句,判斷完成之後,在接著執行(B)處的函數。

以上是同步請求和非同步請求的區別詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn