日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Http中的同步请求和异步请求

發(fā)布時(shí)間:2023/11/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Http中的同步请求和异步请求 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??? 最近在上springmvc的JSON數(shù)據(jù)交換的時(shí)候,老師下課提了一個(gè)課后問(wèn)題:什么是異步請(qǐng)求?什么是同步請(qǐng)求?我想大部分同學(xué)聽(tīng)到這個(gè)問(wèn)題的時(shí)候應(yīng)該和我一樣不知所云。現(xiàn)在,給大家分享一篇關(guān)于同步請(qǐng)求和異步請(qǐng)求的小知識(shí)。

??

舉個(gè)例子:普通B/S模式(同步)AJAX技術(shù)(異步)


同步:提交請(qǐng)求->等待服務(wù)器處理->處理完畢返回 這個(gè)期間客戶端瀏覽器不能干任何事

異步: 請(qǐng)求通過(guò)事件觸發(fā)->服務(wù)器處理(這是瀏覽器仍然可以作其他事情)->處理完畢


同步就是你叫我去吃飯,我聽(tīng)到了就和你去吃飯;如果沒(méi)有聽(tīng)到,你就不停的叫,直到我告訴你聽(tīng)到了,才一起去吃飯。

異步就是你叫我,然后自己去吃飯,我得到消息后可能立即走,也可能等到下班才去吃飯。

所以,要我請(qǐng)你吃飯就用同步的方法,要請(qǐng)我吃飯就用異步的方法,這樣你可以省錢(qián)。

請(qǐng)求方式,分為GET與POST:

GET

最為常見(jiàn)的HTTP請(qǐng)求,普通上網(wǎng)瀏覽頁(yè)面就是GET。GET方式的參數(shù)請(qǐng)求直接跟在URL后,以問(wèn)號(hào)開(kāi)始。(JS中用 window.location.search獲得)。參數(shù)可以用encodeURIComponent進(jìn)行編碼,使用方式:


var EnParam = encodeURIComponent(param);

URL只支持大約2K的長(zhǎng)度,即2048字符數(shù);使用GET進(jìn)行AJAX請(qǐng)求時(shí)候會(huì)緩存導(dǎo)致出現(xiàn)的頁(yè)面不是正確的,一般方法加random參數(shù)值;ajax.send(null)。

POST

向服務(wù)器提交數(shù)據(jù)用到。

需要將form表單中的值先取出轉(zhuǎn)換成字符串,用&符號(hào)連接,(同GET傳參數(shù)一樣);提交數(shù)據(jù)量2GB;使用ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded'),處理提交的字符串;ajax.send(strings),這個(gè)strings表示form中需要提交的內(nèi)容,例如a=1&b=2類似這樣的字符串。



同步與異步:

舉個(gè)例子:普通B/S模式(同步)AJAX技術(shù)(異步)
同步:提交請(qǐng)求->等待服務(wù)器處理->處理完畢返回 這個(gè)期間客戶端瀏覽器不能干任何事
異步: 請(qǐng)求通過(guò)事件觸發(fā)->服務(wù)器處理(這是瀏覽器仍然可以作其他事情)->處理完畢

ajax.open方法中,第3個(gè)參數(shù)是設(shè)同步或者異步。prototype等js類庫(kù)一般都默認(rèn)為異步,即設(shè)為true。先說(shuō)下同步的情況下,js會(huì)等待請(qǐng)求返回,獲取status。不需要onreadystatechange事件處理函數(shù)。而異步則需要onreadystatechange事件處理,且值為4再正確處理下面的內(nèi)容。

//同步傳輸模式

function RequestByGet(nProducttemp,nCountrytemp)
{
??? var xmlhttp

??? if (window.XMLHttpRequest)
??? {
???????? //isIE?? =?? false;
???????? xmlhttp?? =?? new?? XMLHttpRequest();
??? }
??? else if (window.ActiveXObject)
??? {
???????? //isIE?? =?? true;
???????? xmlhttp?? =?? new?? ActiveXObject("Microsoft.XMLHTTP");
??? }
???????????????
??? //Web page location.
??? var URL="http://www.baidu.com/;
??? xmlhttp.open("GET",URL, false);
??? //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=Shift_JIS")
??? xmlhttp.send(null);
??? var result = xmlhttp.status;
?
??? //OK
??? if(result==200)
??? {
??????? document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText;
??? }
??? xmlhttp = null;
}


//異步傳輸模式
var xmlhttp

function RequestByGet(nProducttemp,nCountrytemp)
{
??? if (window.XMLHttpRequest)
??? {
???????? //isIE?? =?? false;
???????? xmlhttp?? =?? new?? XMLHttpRequest();
??? }
??? else if (window.ActiveXObject)
??? {
???????? //isIE?? =?? true;
???????? xmlhttp?? =?? new?? ActiveXObject("Microsoft.XMLHTTP");
??? }
???????????????
??? //Web page location.
??? var URL="http://www.baidu.com/";
??? xmlhttp.open("GET",URL, true);
??? xmlhttp.onreadystatechange = handleResponse;
??? //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=UTF-8")
??? xmlhttp.send(null);
}

function handleResponse()
{
??? if(xmlhttp.readyState == 4 && xmlhttp.status==200)
??? {
??????? document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText;
??????? xmlhttp = null;
??? }
}
同步執(zhí)行模式:
所謂同步執(zhí)行模式,是指語(yǔ)句在同步執(zhí)行模式下,將始終保持對(duì)程序流的控制,直至 程序結(jié)束。如查詢操作,客戶機(jī)上的應(yīng)用程序在向服務(wù)器發(fā)出查詢操作的指令后,將 一直等待服務(wù)器將查詢結(jié)果返回客戶機(jī)端,然后才繼續(xù)進(jìn)行下一步操作。
眾所周知,應(yīng)用程序要從一個(gè)大表中刪除所有的記錄將是非常耗時(shí)的,如果應(yīng)用程序采用的是單線程(thread)同步執(zhí)行方式,某次刪除工作很可能耽誤其他重要工作的完成。如果應(yīng)用程序等待的是遠(yuǎn)程任務(wù),那么遠(yuǎn)程服務(wù)器失敗或網(wǎng)絡(luò)故障或一些無(wú)法預(yù) 知的情況都可能使應(yīng)用程序無(wú)限期地等下去,這是同步執(zhí)行最大的缺陷。
但是同步執(zhí)行模式可以簡(jiǎn)化程序編制的復(fù)雜性。程序員可以不用過(guò)多地了解比較復(fù)雜 的ODBC 2.0 API 的使用,而只需使用 ODBC 的同步執(zhí)行模式或使用數(shù)據(jù)控制項(xiàng)和數(shù)據(jù)庫(kù)對(duì)象變量來(lái)編寫(xiě)應(yīng)用程序,可以提高開(kāi)發(fā)效率,但程序運(yùn)行速度比不上異步執(zhí)行 模式的速度。

異步執(zhí)行模式:
所謂異步執(zhí)行模式,是指語(yǔ)句在異步執(zhí)行模式下,各語(yǔ)句執(zhí)行結(jié) 束的順序與語(yǔ)句執(zhí)行開(kāi)始的順序并不一定相同。例如查詢操作,客戶機(jī)上的應(yīng)用程序在向服務(wù)器發(fā)出了查 詢操作的指令后,將立刻執(zhí)行查詢語(yǔ)句指令的下一條語(yǔ)句,而不需要等到服務(wù)器將查詢結(jié)果返回客戶機(jī)端。 異步執(zhí)行方式使應(yīng)用程序能擺 脫單個(gè)任務(wù)的牽制,提高了靈活性和應(yīng)用程序的執(zhí)行效率。但異步執(zhí)行模式也存在一些問(wèn)題,如它增加了 編程的復(fù)雜性,特別是編寫(xiě)互用性(interoperable)要求較高 的程序。
在負(fù)荷很重的客戶/服務(wù)器系 統(tǒng)中,適宜采用異步執(zhí)行模式。在這種環(huán)境下,時(shí)間 延遲頻繁且漫長(zhǎng),相比之下異步執(zhí)行的開(kāi)銷(xiāo)微不足道。但是,如果應(yīng)用運(yùn)行的環(huán)境比較復(fù)雜,則必須建 立一套完整的機(jī)制,周期性地檢查函數(shù)執(zhí)行的狀態(tài),以決定下一步執(zhí)行方案。進(jìn)行周期的檢查可以有多種方法,如在 應(yīng)用中設(shè)置計(jì)時(shí)器并處理WM_TIMER信息等。
雖然使用異步執(zhí)行模式在編程 序時(shí)十分復(fù)雜,但可以實(shí)現(xiàn)多任務(wù)并行執(zhí)行,使執(zhí)行的效率大大提高。
選擇并設(shè)置執(zhí)行模式 在應(yīng)用程序開(kāi)發(fā)中選擇同步模式還是異步模式,是一個(gè)比較復(fù)雜的層次。當(dāng)查詢或?qū)?shù)據(jù)庫(kù)的修改相對(duì)簡(jiǎn)單時(shí),同步執(zhí)行模式是一種 很好的選擇,它能夠在幾秒 或更少的時(shí)間內(nèi)返回結(jié)果數(shù)據(jù)。另外,在應(yīng)用程序獲得結(jié)果集前不能繼續(xù)執(zhí)行時(shí),根本不必要使用異步執(zhí) 行模式。在復(fù)雜查詢情況下,特別是復(fù)雜的多行數(shù)據(jù) 庫(kù)的UPDATE 或DELETE操作,可能需要很長(zhǎng)的時(shí)間才能完成, 需采用異步執(zhí)行模式,讓用戶可以同時(shí)對(duì)程序的其他 部分進(jìn)行操作。
對(duì)于一般程序員來(lái)說(shuō),如果他對(duì)同步執(zhí)行模式與異步執(zhí)行模式不了解, 他往往會(huì)在對(duì)服務(wù)器發(fā)出一個(gè)操作語(yǔ)句(查詢或讀取一條記錄等操作)后,立該引用服務(wù)器返回的執(zhí)行結(jié)果,或者對(duì)該 結(jié)果進(jìn)行下一步操作,這是很危險(xiǎn)的。因?yàn)?#xff0c;在異步執(zhí)行模式下,客戶機(jī)上的后續(xù)語(yǔ)句是在該操作語(yǔ)句發(fā) 出后接著執(zhí)行的,但由于各種原因,服務(wù)器不一定能 執(zhí)行完該操作語(yǔ)句,并在后續(xù)語(yǔ)句執(zhí)行前將結(jié)果返回客戶機(jī)。因此,后續(xù)語(yǔ)句在引用前一操作語(yǔ)句的執(zhí)行 結(jié)果時(shí),往往會(huì)因?yàn)樵搱?zhí)行結(jié)果并不存在而引用了錯(cuò) 誤的值,造成系統(tǒng)錯(cuò)誤或死鎖,所以在實(shí)際應(yīng)用中應(yīng)根據(jù)具體情況慎重選擇執(zhí)行模式。????


轉(zhuǎn)自:https://blog.csdn.net/morethinkmoretry/article/details/5791258


轉(zhuǎn)載于:https://www.cnblogs.com/Black-YeJing/p/9131124.html

總結(jié)

以上是生活随笔為你收集整理的Http中的同步请求和异步请求的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。