聊聊四種實(shí)時(shí)通信技術(shù):短輪詢、長(zhǎng)輪詢、WebSocket 和 SSE
這篇文章,我們聊聊 四種實(shí)時(shí)通信技術(shù):短輪詢、長(zhǎng)輪詢、WebSocket 和 SSE 。
1.短輪詢
瀏覽器 定時(shí)(如每秒)向服務(wù)器發(fā)送 HTTP 請(qǐng)求,服務(wù)器立即返回當(dāng)前數(shù)據(jù)(無(wú)論是否有更新)。
圖片
- 優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,兼容性極佳
- 缺點(diǎn):高頻請(qǐng)求浪費(fèi)資源,實(shí)時(shí)性差(依賴輪詢間隔)
- 延遲:高(取決于輪詢頻率)
- 適用場(chǎng)景:兼容性要求高,延遲不敏感的簡(jiǎn)單場(chǎng)景。
筆者職業(yè)生涯印象最深刻的短輪詢應(yīng)用場(chǎng)景是比分直播:
圖片
如圖所示,用戶進(jìn)入比分直播界面,瀏覽器定時(shí)查詢賽事信息(比分變動(dòng)、黃紅牌等),假如數(shù)據(jù)有變化,則重新渲染頁(yè)面。
這種方式實(shí)現(xiàn)起來(lái)非常簡(jiǎn)單可靠,但是頻繁的調(diào)用后端接口,會(huì)對(duì)后端性能會(huì)有影響(主要是 CPU)。同時(shí),因?yàn)橐蕾囕喸冮g隔,頁(yè)面數(shù)據(jù)變化有延遲,用戶體驗(yàn)并不算太好。
2.長(zhǎng)輪詢
瀏覽器發(fā)送 HTTP 請(qǐng)求后,服務(wù)器 掛起連接 直到數(shù)據(jù)更新或超時(shí),返回響應(yīng)后瀏覽器立即發(fā)起新請(qǐng)求。
圖片
- 優(yōu)點(diǎn):減少無(wú)效請(qǐng)求,比短輪詢實(shí)時(shí)性更好
- 缺點(diǎn):服務(wù)器需維護(hù)掛起連接,高并發(fā)時(shí)資源消耗大
- 延遲:中(取決于數(shù)據(jù)更新頻率)
- 適用場(chǎng)景:需要較好實(shí)時(shí)性且無(wú)法用 WebSocket/SSE 的場(chǎng)景(如消息通知)
長(zhǎng)輪詢最常見的應(yīng)用場(chǎng)景是:配置中心,我們耳熟能詳?shù)淖?cè)中心 Nacos 、阿波羅都是依賴長(zhǎng)輪詢機(jī)制。
nacos長(zhǎng)輪詢
客戶端發(fā)起請(qǐng)求后,Nacos 服務(wù)端不會(huì)立即返回請(qǐng)求結(jié)果,而是將請(qǐng)求掛起等待一段時(shí)間,如果此段時(shí)間內(nèi)服務(wù)端數(shù)據(jù)變更,立即響應(yīng)客戶端請(qǐng)求,若是一直無(wú)變化則等到指定的超時(shí)時(shí)間后響應(yīng)請(qǐng)求,客戶端重新發(fā)起長(zhǎng)輪詢。
3.WebSocket
基于 TCP 的全雙工協(xié)議,通過 HTTP 升級(jí)握手(Upgrade: websocket)建立持久連接(雙向?qū)崟r(shí)通信)。
image.png
- 優(yōu)點(diǎn):最低延遲,支持雙向交互,節(jié)省帶寬
- 缺點(diǎn):實(shí)現(xiàn)復(fù)雜,需單獨(dú)處理連接狀態(tài)
- 延遲:極低
- 適用場(chǎng)景:聊天室、在線游戲、協(xié)同編輯等 高實(shí)時(shí)雙向交互 需求
筆者曾經(jīng)服務(wù)于北京一家電商公司,參與直播答題功能的研發(fā)。
圖片
直播答題整體架構(gòu)見下圖:
圖片
TCP 網(wǎng)關(guān)的技術(shù)選型是:Netty、ProtoBuf、WebSocket ,選擇 WebSocket 是因?yàn)樗С蛛p向?qū)崟r(shí)通信,同時(shí) Netty 內(nèi)置了 WebSocket 實(shí)現(xiàn)類,工程實(shí)現(xiàn)起來(lái)相對(duì)簡(jiǎn)單。
4.Server Send Event(SSE)
基于 HTTP 協(xié)議,服務(wù)器可 主動(dòng)推送 數(shù)據(jù)流(如Content-Type: text/event-stream),瀏覽器通過EventSource API 監(jiān)聽。
圖片
- 優(yōu)點(diǎn):原生支持?jǐn)嗑€重連,輕量級(jí)(HTTP協(xié)議)
- 缺點(diǎn):?jiǎn)蜗蛲ㄐ牛ǚ?wù)端--》客戶端),低版本 IE 瀏覽器不支持
- 延遲:低(服務(wù)器可即時(shí)推送)
- 適用場(chǎng)景:股票行情、實(shí)時(shí)日志等 服務(wù)器單向推送 需求。
SSE 最經(jīng)典的應(yīng)用場(chǎng)景是 : DeepSeek web 聊天界面 ,如圖所示:
圖片
當(dāng)在 DeepSeek 對(duì)話框發(fā)送消息后,瀏覽器會(huì)發(fā)送一個(gè) HTTP 請(qǐng)求 ,服務(wù)端會(huì)通過 SSE 方式將數(shù)據(jù)返回到瀏覽器。
圖片
5.總結(jié)
特性 | 短輪詢 | 長(zhǎng)輪詢 | SSE | WebSocket |
協(xié)議 | HTTP | HTTP | HTTP | WebSocket(基于TCP) |
實(shí)時(shí)性 | 低 | 中 | 高 | 極高 |
資源消耗 | 高(頻繁請(qǐng)求) | 中(掛起連接) | 低 | 低(長(zhǎng)連接) |
選擇建議:
- 需要 簡(jiǎn)單兼容性 → 短輪詢
- 需要 中等實(shí)時(shí)性 → 長(zhǎng)輪詢
- 只需 服務(wù)器推送 → SSE
- 需要 全雙工實(shí)時(shí)交互 → WebSocket


































