新聞中心
今天來(lái)聊聊 4 種接收實(shí)時(shí)更新的方法,各有利弊,在設(shè)計(jì)中酌情選取。

創(chuàng)新互聯(lián)公司主營(yíng)防城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,手機(jī)APP定制開(kāi)發(fā),防城h5小程序制作搭建,防城網(wǎng)站營(yíng)銷推廣歡迎防城等地區(qū)企業(yè)咨詢
圖片
01 短輪詢(Short Polling)
這是最基本的方法??蛻舳藭?huì)重復(fù)向服務(wù)器發(fā)送 HTTP 請(qǐng)求。
我們來(lái)看一個(gè)使用場(chǎng)景:我們登錄一個(gè)網(wǎng)站,看到一個(gè)二維碼,然后我們可以用智能手機(jī)掃描二維碼。這個(gè)二維碼通常用于特定操作,如身份驗(yàn)證。應(yīng)用程序并不知道我們掃描二維碼的確切時(shí)間。因此,它會(huì)每隔 1-2 秒向服務(wù)器發(fā)送一次請(qǐng)求,以檢查 QR 碼的狀態(tài)。一旦我們用智能手機(jī)掃描了二維碼,服務(wù)器就會(huì)識(shí)別掃描,并響應(yīng)應(yīng)用程序的下一次檢查,發(fā)回最新?tīng)顟B(tài)。這樣,我們就能在掃描二維碼后的 1-2 秒內(nèi)得到響應(yīng)。這種頻繁的檢查就是我們稱這種方法為 "短輪詢 "的原因。
這種方法有兩個(gè)問(wèn)題:
- 它會(huì)發(fā)送過(guò)多的 HTTP 請(qǐng)求。這會(huì)占用帶寬,增加服務(wù)器負(fù)載。
- 在最糟糕的情況下,我們可能會(huì)等待長(zhǎng)達(dá) 2 秒的響應(yīng),造成明顯的延遲。
02 長(zhǎng)輪詢(Long Polling)
長(zhǎng)輪詢通過(guò)為 HTTP 請(qǐng)求設(shè)置更長(zhǎng)的超時(shí)來(lái)解決短輪詢問(wèn)題。在上文的例子中,我們將超時(shí)時(shí)間調(diào)整為 30 秒。如果我們?cè)谶@個(gè)時(shí)間范圍內(nèi)掃描二維碼,服務(wù)器就會(huì)立即發(fā)送響應(yīng)。這種方法大大減少了 HTTP 請(qǐng)求的數(shù)量。
盡管長(zhǎng)時(shí)間輪詢減少了請(qǐng)求數(shù)量,但每個(gè)開(kāi)放的請(qǐng)求仍會(huì)與服務(wù)器保持連接。如果有很多客戶端,就會(huì)對(duì)服務(wù)器資源造成壓力。
03 WebSocket
短輪詢和長(zhǎng)輪詢對(duì)于二維碼掃描等較簡(jiǎn)單的任務(wù)都很有效。但對(duì)于復(fù)雜、數(shù)據(jù)量大、實(shí)時(shí)性強(qiáng)的任務(wù)(如在線游戲),則需要更高效的解決方案 – 這就是 WebSocket。
TCP 本身允許雙向數(shù)據(jù)流,使客戶端和服務(wù)器可以同時(shí)向?qū)Ψ桨l(fā)送數(shù)據(jù)。然而,建立在 TCP 基礎(chǔ)上的 HTTP/1.1 并沒(méi)有充分利用這一功能。在 HTTP/1.1 中,數(shù)據(jù)傳輸通常是按順序進(jìn)行的:一方發(fā)送數(shù)據(jù),然后另一方發(fā)送數(shù)據(jù)。這種設(shè)計(jì)雖然足以滿足網(wǎng)頁(yè)交互的需要,但對(duì)于在線游戲等需要同步實(shí)時(shí)通信的應(yīng)用來(lái)說(shuō),就顯得力不從心了。WebSocket 是另一種基于 TCP 的協(xié)議,它允許客戶端和服務(wù)器在單個(gè)連接上進(jìn)行全雙工通信,從而彌補(bǔ)了這一不足。
04 服務(wù)器發(fā)送事件(SSE,Server-Sent Events)
SSE 用于一些特殊的使用情況。當(dāng)客戶端建立 SSE 連接時(shí),服務(wù)器會(huì)保持該連接開(kāi)放以持續(xù)發(fā)送更新。這種設(shè)置非常適合服務(wù)器需要定期向客戶端推送數(shù)據(jù),而客戶端只需接收數(shù)據(jù),無(wú)需向服務(wù)器發(fā)送信息的情況。
一個(gè)典型的例子就是實(shí)時(shí)股票市場(chǎng)數(shù)據(jù)更新。有了 SSE,服務(wù)器就可以向客戶端推送實(shí)時(shí)數(shù)據(jù),而無(wú)需在每次更新時(shí)發(fā)出請(qǐng)求。值得注意的是,與 WebSockets 不同,SSE 不支持雙向通信,因此不太適合需要來(lái)回通信的用例。
當(dāng)前題目:一圖看懂四種接收實(shí)時(shí)數(shù)據(jù)更新的設(shè)計(jì)
當(dāng)前鏈接:http://m.5511xx.com/article/cdjgich.html


咨詢
建站咨詢
