Comet vs SSE vs Websocket

在標(biāo)準(zhǔn)的HTTP模型中,服務(wù)器無(wú)法與客戶端啟動(dòng)連接、發(fā)送未經(jīng)請(qǐng)求的HTTP響應(yīng)給客戶端,因此,為了盡快接收異步事件,就需要服務(wù)器能在不等待的情況下向客戶端發(fā)送更新消息,目前主要存在以下幾種方法:

長(zhǎng)/短輪詢:(客戶端拉動(dòng))

Iframe流:(服務(wù)端推送)

SSE:(服務(wù)端推送)

Websocket:(服務(wù)端推送)

輪詢

輪詢是客戶端定期向服務(wù)端請(qǐng)求新數(shù)據(jù)的一種技術(shù),主要分為短輪詢和長(zhǎng)輪詢。


? ? 短輪詢: 基于Ajax請(qǐng)求的計(jì)時(shí)器,固定延時(shí)調(diào)用;


? ? 長(zhǎng)輪詢:基于Comet(是一種用于web的推送技術(shù),能使服務(wù)器實(shí)時(shí)地將更新的信息傳送到客戶端,而無(wú)須客戶端發(fā)出請(qǐng)求),建立連接后,一直等待服務(wù)端有數(shù)據(jù)之后的響應(yīng)(或超時(shí)),返回后再重新連接;

Iframe流(HTTP流式傳輸)


iframe流是在頁(yè)面中插入一個(gè)隱藏的iframe,利用其src屬性在服務(wù)器和客戶端之間創(chuàng)建一條長(zhǎng)連接,服務(wù)器向iframe傳輸數(shù)據(jù)(通常是HTML,對(duì)客戶端js的調(diào)用)來(lái)實(shí)時(shí)更新頁(yè)面。

Tip:輪詢和Iframe流都屬于Comet,一種用于web的推送技術(shù),能使服務(wù)器實(shí)時(shí)地將更新的信息傳送到客戶端,而無(wú)需客戶發(fā)出請(qǐng)求

SSE


Server-Send Events 實(shí)現(xiàn)了客戶端請(qǐng)求服務(wù)端,然后服務(wù)端利用與客戶端建立的這條通信連接push數(shù)據(jù)給客戶端,客戶端接收數(shù)據(jù)并處理。

本質(zhì):以流信息的方式通信,完成一次用時(shí)很長(zhǎng)的下載。

特點(diǎn):

? ? 1. 使用HTTP協(xié)議,現(xiàn)有的服務(wù)器軟件都支持;

? ? 2. 輕量級(jí),使用簡(jiǎn)單;

? ? 3. 默認(rèn)支持?jǐn)嗑€重連,Websocket需要自己實(shí)現(xiàn);

? ? 4. 一般只用來(lái)傳送文本,二進(jìn)制數(shù)據(jù)需要編碼后傳送;

? ? 5. 支持自定義發(fā)送的消息類(lèi)型。


Websocket


Websocket是一種應(yīng)用層協(xié)議,提供了客戶端和服務(wù)端之間全雙工通信機(jī)制。

特點(diǎn):

? ? ?1. 服務(wù)器可以主動(dòng)向客戶端推送消息,客戶端也可以主動(dòng)向服務(wù)器發(fā)送信息;

? ? ?2. 建立在TCP協(xié)議之上,服務(wù)器端的實(shí)現(xiàn)比較容易;

? ? ?3. 沒(méi)有同源限制,客戶端可以與任意服務(wù)器通信;

? ? ?4. 協(xié)議標(biāo)識(shí)符是ws(如果加密,則為wss),服務(wù)網(wǎng)址就是URL

? ? ?5. 默認(rèn)支持傳送二級(jí)制數(shù)據(jù),也可以傳輸文本。


優(yōu)缺點(diǎn)及適用場(chǎng)景對(duì)比


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容