国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

瀏覽器藏了10年的單行代碼,讓WebSocket成了冤大頭

0
分享至


2015年,瀏覽器廠商往JavaScript里塞了一行代碼,然后集體沉默。沒人教,文檔 bury 在角落,Stack Overflow 上搜到的全是 WebSocket 教程。結(jié)果過去十年,無數(shù)程序員為實時推送寫了成千上萬行重連邏輯、心跳檢測、狀態(tài)恢復——而答案早就躺在那兒,一行搞定。

這行代碼是 new EventSource('/events')。它做的事情和 WebSocket 很像,但哲學完全相反:WebSocket 是"你們隨便聊",EventSource(服務器發(fā)送事件,SSE)是"服務器說,客戶端聽"。

大多數(shù)實時場景根本不需要雙向?qū)υ挕?/b>股價跳動、構建日志、通知紅點、直播彈幕——都是服務器推、客戶端收。用 WebSocket 做這些,就像為了收快遞專門雇個雙向?qū)χv的保安,SSE 則是門鈴響了去開門,完事。

一行代碼的暴力美學

EventSource 的 API 設計帶著一種老派的傲慢:連接、監(jiān)聽、完事。

```javascript const source = new EventSource('/events'); source.onmessage = e => document.querySelector('#feed').textContent = e.data; ```

沒有 npm install,沒有 onclose 回調(diào),沒有指數(shù)退避的重連算法。瀏覽器自動處理斷線重連,規(guī)范強制要求。你寫的代碼只管消費消息,基礎設施的臟活瀏覽器包了。

對比 WebSocket 的典型實現(xiàn):onopen 握手、onerror 降級、onclose 啟動定時器、重連后比對消息 ID 補漏。這些代碼在無數(shù)項目里被復制粘貼,調(diào)試過凌晨三點的偶發(fā)斷連,而 SSE 的用戶根本沒意識到這些問題存在。

Rust 的 axum 框架里,SSE 端點長這樣:

```rust async fn events() -> Sse>> { let stream = stream::repeat_with(|| Event::default().data("update")) .map(Ok) .throttle(Duration::from_secs(1)); Sse::new(stream).keep_alive(KeepAlive::default()) } ```


返回一個流,運行時處理背壓、?;睢⒖蛻舳藬嚅_。沒有連接池管理,沒有 upgrade 握手,就是普通 HTTP。每個代理都認識它,每個 CDN 都能透傳它。

三個頭部搞定一切

SSE 的協(xié)議規(guī)范短得像個玩笑:

``` Content-Type: text/event-stream Cache-Control: no-cache Connection: keep-alive ```

服務器發(fā)以 data: 開頭的行,瀏覽器解析。沒有幀編碼,沒有掩碼,沒有操作碼。文本流,換行分割,HTTP 從頭到尾。

WebSocket 為了兼容 HTTP 握手,先偽裝成 HTTP,再 upgrade 成獨立協(xié)議。這個設計在 2011 年情有可原——當時很多中間件不認識 WebSocket——但現(xiàn)在成了歷史包袱。防火墻、負載均衡、企業(yè)代理,每多一層都可能 upgrade 失敗。

SSE 不走 upgrade,它就是 HTTP。公司內(nèi)網(wǎng)的老舊代理?認識。需要走 CDN 邊緣緩存?可以。想加個認證中間件?標準 Cookie/Header 直接復用。

協(xié)議簡單到作弊。

自動恢復:被低估的殺手特性

WebSocket 斷線后,開發(fā)者要面對一堆決策:多久重試?退避策略用線性還是指數(shù)?重連后怎么知道漏了哪些消息?要不要服務端維護消息隊列?


SSE 的規(guī)范直接規(guī)定了自動重連,瀏覽器實現(xiàn)它。斷線后,瀏覽器按退避算法自己連,連上后繼續(xù)收。服務端不需要為"客戶端剛重連"這個狀態(tài)寫特殊邏輯。

當然,消息丟失問題還在。但 SSE 支持 Last-Event-ID 頭部,重連時自動帶上最后收到的消息 ID,服務端可以據(jù)此補發(fā)。這個機制是可選的,簡單場景直接忽略,復雜場景按需實現(xiàn)——而不是像 WebSocket 那樣,重連邏輯是必答題。

一個類比:WebSocket 像租了輛跑車,動力強勁但得自己保養(yǎng);SSE 像地鐵,時刻表固定,壞了等下一班,你不用管調(diào)度。

什么時候該用 WebSocket?

不是全面替代。聊天室、多人協(xié)同編輯、實時游戲——這些需要客戶端頻繁發(fā)消息的,WebSocket 的雙向通道更自然。但問問自己:你的功能真的需要雙向嗎?

Dashboard 實時數(shù)據(jù)、CI 構建日志、股票行情、社交 Feed、進度條——這些占"實時功能"的絕大多數(shù)。它們用 SSE 更輕、更穩(wěn)、代碼更少。

有個細節(jié)很多人沒注意:SSE 天然支持瀏覽器的事件流接口,可以 addEventListener 監(jiān)聽特定事件類型,做路由分發(fā)。WebSocket 收到消息要自己解析路由。

另一個被忽略的點:SSE 基于 HTTP,所以能享受 HTTP/2 的多路復用。一個 TCP 連接可以承載多個 SSE 流,瀏覽器自動調(diào)度。WebSocket 一個連接就是一個連接,開多了就是資源競爭。

技術選型里,"夠用且簡單"往往勝過"強大但復雜"。

原文作者 Vivian Voss 在文末留了句話:「One rather appreciates infrastructure that does not require a babysitter.」(人總該欣賞那些不需要保姆的基礎設施。)

這句話的刻薄之處在于,它暗示了很多程序員正在做的事情——寫重連邏輯、調(diào)心跳間隔、排查代理問題——本可以不存在。不是技術深度的問題,是信息差的問題。2015 年就有的標準,2025 年還在被忽視。

下次設計實時功能前,你會先問自己"真的需要雙向嗎",還是直接 npm install ws?

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
意大利經(jīng)濟發(fā)展部前副部長:建議想要與中國合作的外企都讀一讀“十五五”規(guī)劃

意大利經(jīng)濟發(fā)展部前副部長:建議想要與中國合作的外企都讀一讀“十五五”規(guī)劃

界面新聞
2026-03-25 15:50:08
信達證券所長被曝猥褻女員工,撫摸私密處,正臉照被扒,警方介入

信達證券所長被曝猥褻女員工,撫摸私密處,正臉照被扒,警方介入

180視角
2026-03-25 15:58:41
崩潰,市級城投集團:全員薪資腰斬后還發(fā)不出工資!

崩潰,市級城投集團:全員薪資腰斬后還發(fā)不出工資!

黯泉
2026-03-25 21:19:18
中國銀行、建設銀行、民生銀行、工商銀行,發(fā)布風險提示

中國銀行、建設銀行、民生銀行、工商銀行,發(fā)布風險提示

南方都市報
2026-03-25 10:02:16
是否有中國船只順利通過霍爾木茲海峽?外交部回應

是否有中國船只順利通過霍爾木茲海峽?外交部回應

財聯(lián)社
2026-03-25 15:46:15
笑掉大牙!伊朗高層當眾互撕,吹破天的強硬,連軍餉都發(fā)不出來

笑掉大牙!伊朗高層當眾互撕,吹破天的強硬,連軍餉都發(fā)不出來

老馬拉車莫少裝
2026-03-25 19:39:00
4月1日醫(yī)保7號令落地!1965-1985年出生的,這6件事務必抓緊辦

4月1日醫(yī)保7號令落地!1965-1985年出生的,這6件事務必抓緊辦

混沌錄
2026-03-25 15:50:11
張雪峰去世真相!網(wǎng)友:偌大的公司靠他個人ip養(yǎng)活,早死是必然的

張雪峰去世真相!網(wǎng)友:偌大的公司靠他個人ip養(yǎng)活,早死是必然的

火山詩話
2026-03-25 09:18:58
特朗普:臺灣屬于中國,武統(tǒng)是中方的自由,但一動手美國會不高興

特朗普:臺灣屬于中國,武統(tǒng)是中方的自由,但一動手美國會不高興

共工之錨
2026-03-22 00:48:09
75歲劉曉慶發(fā)文:這么想我死啊

75歲劉曉慶發(fā)文:這么想我死啊

都市快報橙柿互動
2026-03-25 15:21:36
“霍爾木茲決戰(zhàn)”,不打了

“霍爾木茲決戰(zhàn)”,不打了

中國新聞周刊
2026-03-25 18:43:08
譚瑞松,被判死緩

譚瑞松,被判死緩

新京報政事兒
2026-03-25 17:17:03
傳張雪峰二婚妻子清純甜美:去年已生子,11歲女兒遺傳繼承恐生變

傳張雪峰二婚妻子清純甜美:去年已生子,11歲女兒遺傳繼承恐生變

博士觀察
2026-03-25 21:33:04
原來如此!張雪峰去世當天吃午飯和搶救畫面流出!更多細節(jié)曝光

原來如此!張雪峰去世當天吃午飯和搶救畫面流出!更多細節(jié)曝光

霹靂炮
2026-03-25 21:35:07
1000億背后的陽謀:拼多多利用中國制造的優(yōu)勢,要狂掃國外市場

1000億背后的陽謀:拼多多利用中國制造的優(yōu)勢,要狂掃國外市場

風向觀察
2026-03-25 20:46:14
退役體操冠軍,直播“擦邊”之后

退役體操冠軍,直播“擦邊”之后

中國新聞周刊
2026-03-25 21:34:08
臺獨大金主身中29槍暴斃

臺獨大金主身中29槍暴斃

雪中風車
2026-03-24 20:19:46
實錘了,日媒爆料六本木高級陪酒女廣州運毒被捕,日本網(wǎng)友這樣說

實錘了,日媒爆料六本木高級陪酒女廣州運毒被捕,日本網(wǎng)友這樣說

日本物語
2026-03-25 20:56:54
堅決反對中國任何城市申辦奧運會,國際奧委會這次怕是真失算了

堅決反對中國任何城市申辦奧運會,國際奧委會這次怕是真失算了

南權先生
2026-03-25 15:25:11
首次全流程展示!國產(chǎn)無人機蜂群作戰(zhàn)系統(tǒng)震撼亮相

首次全流程展示!國產(chǎn)無人機蜂群作戰(zhàn)系統(tǒng)震撼亮相

環(huán)球網(wǎng)資訊
2026-03-25 14:26:17
2026-03-26 01:43:00
野生運營
野生運營
懂點產(chǎn)品,懂點AI,正在努力給平淡日子搞點新花樣。
36文章數(shù) 0關注度
往期回顧 全部

科技要聞

紅極一時卻草草收場,Sora宣布正式關停

頭條要聞

伊朗:正在搜捕逃亡美軍

頭條要聞

伊朗:正在搜捕逃亡美軍

體育要聞

35歲替補門將,憑什么入選英格蘭隊?

娛樂要聞

張雪峰遺產(chǎn)分割復雜!是否立遺囑成關鍵

財經(jīng)要聞

管濤:中東局勢如何影響人民幣匯率走勢?

汽車要聞

智己LS8放大招 30萬內(nèi)8系旗艦+全線控底盤秀實力

態(tài)度原創(chuàng)

教育
數(shù)碼
本地
家居
藝術

教育要聞

那些躺平的孩子,其實是看透了父母的偽裝

數(shù)碼要聞

蘋果macOS 26.4新增“慢速充電器”提示

本地新聞

來永泰同安 赴一場春天的約會

家居要聞

輕奢堇天府 小資情調(diào)

藝術要聞

張雪峰走了,他公司所在的這棟樓高177.8米,耗資超10億!

無障礙瀏覽 進入關懷版