337p人体粉嫩胞高清图片,97人妻精品一区二区三区在线 ,日本少妇自慰免费完整版,99精品国产福久久久久久,久久精品国产亚洲av热一区,国产aaaaaa一级毛片,国产99久久九九精品无码,久久精品国产亚洲AV成人公司
網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

瀏覽器藏了10年的單行代碼,讓W(xué)ebSocket成了冤大頭

0
分享至


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

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

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

一行代碼的暴力美學(xué)

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

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

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

對比 WebSocket 的典型實現(xiàn):onopen 握手、onerror 降級、onclose 啟動定時器、重連后比對消息 ID 補漏。這些代碼在無數(shù)項目里被復(fù)制粘貼,調(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 ```

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

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

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

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

自動恢復(fù):被低估的殺手特性

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


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

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

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

什么時候該用 WebSocket?

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

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

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

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

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

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

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

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

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

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.

相關(guān)推薦
熱點推薦
15.6公里每秒!伴隨巨響聲,1噸重火球墜落美國:擊穿房子屋頂

15.6公里每秒!伴隨巨響聲,1噸重火球墜落美國:擊穿房子屋頂

肖茲探秘說
2026-03-24 16:32:33
四天619次進攻、6090人傷亡:俄春季攻勢為何高傷亡低戰(zhàn)果?

四天619次進攻、6090人傷亡:俄春季攻勢為何高傷亡低戰(zhàn)果?

高博新視野
2026-03-25 08:00:28
黃文雅任深圳市政府副秘書長,此前任龍崗區(qū)委副書記

黃文雅任深圳市政府副秘書長,此前任龍崗區(qū)委副書記

南方都市報
2026-03-25 20:54:03
315晚會后,不出意外的話,這7樣?xùn)|西再“無人問津”,白給也不要

315晚會后,不出意外的話,這7樣?xùn)|西再“無人問津”,白給也不要

海豚女王
2026-03-25 04:16:54
三峽功臣、全國勞模陳文夫落馬,他打造的無縫大壩也沒堵住貪腐!

三峽功臣、全國勞模陳文夫落馬,他打造的無縫大壩也沒堵住貪腐!

至死不渝的愛情
2026-03-25 03:12:36
14億人集體買房,為什么最后買出了一個爛攤子?

14億人集體買房,為什么最后買出了一個爛攤子?

流蘇晚晴
2026-03-25 18:14:02
王曼昱見此消息定滿心悲痛,張雪峰曾許下承諾:請她做公司代言人

王曼昱見此消息定滿心悲痛,張雪峰曾許下承諾:請她做公司代言人

冷桂零落
2026-03-25 20:15:22
中美都在賭,美國賭中國不敢打日本,而中國則在賭美國不會下場

中美都在賭,美國賭中國不敢打日本,而中國則在賭美國不會下場

南權(quán)先生
2026-03-24 15:30:39
比亞迪又出黑科技,光伏天窗量產(chǎn)上車,或首搭“唐/漢”旗艦!

比亞迪又出黑科技,光伏天窗量產(chǎn)上車,或首搭“唐/漢”旗艦!

芭比衣櫥
2026-03-24 17:21:01
東北兩省書記省長會見劉強東

東北兩省書記省長會見劉強東

觀察者網(wǎng)
2026-03-25 21:43:37
85后寶媽長期陪娃寫作業(yè)到半夜,竟遭遇“鬼剃頭” :孩子動作慢,心里焦慮又睡不好,開始僅有手指肚大,現(xiàn)在已經(jīng)變成巴掌大斑禿了

85后寶媽長期陪娃寫作業(yè)到半夜,竟遭遇“鬼剃頭” :孩子動作慢,心里焦慮又睡不好,開始僅有手指肚大,現(xiàn)在已經(jīng)變成巴掌大斑禿了

觀威海
2026-03-25 08:59:11
國民黨大亂!馬英九緊急發(fā)聲、與鄭麗文決裂?蕭旭岑恐遭牢獄之災(zāi)

國民黨大亂!馬英九緊急發(fā)聲、與鄭麗文決裂?蕭旭岑恐遭牢獄之災(zāi)

趣文說娛
2026-03-25 16:42:22
洛克希德·馬丁:將精確打擊導(dǎo)彈產(chǎn)量提升四倍

洛克希德·馬丁:將精確打擊導(dǎo)彈產(chǎn)量提升四倍

財聯(lián)社
2026-03-25 19:18:36
扒開張雪峰的家底才明白:他最厲害的不是報志愿,而是選對妻子

扒開張雪峰的家底才明白:他最厲害的不是報志愿,而是選對妻子

風(fēng)起見你
2026-03-25 10:40:24
上海一男子每天3包煙,持續(xù)幾十年!醫(yī)生:全身沒一根血管是好的

上海一男子每天3包煙,持續(xù)幾十年!醫(yī)生:全身沒一根血管是好的

上觀新聞
2026-03-24 13:32:07
張雪峰:?大學(xué)這倆證,?拼了老命也得給我考下來

張雪峰:?大學(xué)這倆證,?拼了老命也得給我考下來

熱點網(wǎng)友
2026-03-25 12:18:57
張雪峰搶救細節(jié)曝光!他認識的副院長參與搶救,用最好的救護手段

張雪峰搶救細節(jié)曝光!他認識的副院長參與搶救,用最好的救護手段

安寧007
2026-03-24 23:14:49
25日最新:美軍基地被炸視頻,在外網(wǎng)瘋傳,戰(zhàn)損比很驚人

25日最新:美軍基地被炸視頻,在外網(wǎng)瘋傳,戰(zhàn)損比很驚人

消失的電波
2026-03-25 16:52:47
為什么氰化物入口幾秒,還沒到胃呢,人立馬就會死了?

為什么氰化物入口幾秒,還沒到胃呢,人立馬就會死了?

心中的麥田
2026-03-24 19:53:20
特朗普幫了中國大忙,中國首次成為全球第一,日本完全被踩在腳下

特朗普幫了中國大忙,中國首次成為全球第一,日本完全被踩在腳下

有范又有料
2026-03-25 13:48:51
2026-03-26 00:39:00
野生運營
野生運營
懂點產(chǎn)品,懂點AI,正在努力給平淡日子搞點新花樣。
36文章數(shù) 0關(guān)注度
往期回顧 全部

科技要聞

紅極一時卻草草收場,Sora宣布正式關(guān)停

頭條要聞

伊朗放話愿意與"主和派"萬斯談 特朗普表態(tài)

頭條要聞

伊朗放話愿意與"主和派"萬斯談 特朗普表態(tài)

體育要聞

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

娛樂要聞

張雪峰經(jīng)搶救無效不幸去世 年僅41歲

財經(jīng)要聞

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

汽車要聞

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

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

家居
數(shù)碼
健康
旅游
親子

家居要聞

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

數(shù)碼要聞

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

轉(zhuǎn)頭就暈的耳石癥,能開車上班嗎?

旅游要聞

探秘云南保山勐赫小鎮(zhèn),感受與怒江貢山相擁的獨特魅力!

親子要聞

深圳兩起幼兒園事故糾紛:比起磕碰,“信息差”才是真痛點!

無障礙瀏覽 進入關(guān)懷版