<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

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

      0
      分享至


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

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

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

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

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

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

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

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

      Rust 的 axum 框架里,SSE 端點(diǎn)長(zhǎng)這樣:

      ```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()) } ```


      返回一個(gè)流,運(yùn)行時(shí)處理背壓、保活、客戶端斷開。沒有連接池管理,沒有 upgrade 握手,就是普通 HTTP。每個(gè)代理都認(rèn)識(shí)它,每個(gè) CDN 都能透?jìng)魉?/p>

      三個(gè)頭部搞定一切

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

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

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

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

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

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

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

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


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

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

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

      什么時(shí)候該用 WebSocket?

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

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

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

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

      技術(shù)選型里,"夠用且簡(jiǎn)單"往往勝過"強(qiáng)大但復(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è)計(jì)實(shí)時(shí)功能前,你會(huì)先問自己"真的需要雙向嗎",還是直接 npm install ws?

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(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)推薦
      熱點(diǎn)推薦
      跌麻了!筆記本開年銷量暴跌40%近乎腰斬:沒人買了

      跌麻了!筆記本開年銷量暴跌40%近乎腰斬:沒人買了

      中國(guó)能源網(wǎng)
      2026-03-26 14:13:04
      焦泊喬離隊(duì),杜鋒或下課?廣東男籃官方回應(yīng),球迷:上一個(gè)是趙睿

      焦泊喬離隊(duì),杜鋒或下課?廣東男籃官方回應(yīng),球迷:上一個(gè)是趙睿

      萌蘭聊個(gè)球
      2026-03-27 14:42:32
      蒙古朝鮮越南這三大鄰國(guó),面對(duì)中國(guó)都做出了同一個(gè)抉擇

      蒙古朝鮮越南這三大鄰國(guó),面對(duì)中國(guó)都做出了同一個(gè)抉擇

      凡知
      2026-03-27 18:31:34
      3-1奪冠!中國(guó)女乒29歲王牌復(fù)蘇:組最強(qiáng)豪陣劍指世乒賽

      3-1奪冠!中國(guó)女乒29歲王牌復(fù)蘇:組最強(qiáng)豪陣劍指世乒賽

      李喜林籃球絕殺
      2026-03-26 20:29:48
      張雪峰生前推薦的6所高校,性價(jià)比極高,記得默默收藏!

      張雪峰生前推薦的6所高校,性價(jià)比極高,記得默默收藏!

      教育導(dǎo)向分享
      2026-03-25 22:32:02
      我軍頂級(jí)的軍事天才只有一人,他打的仗,西點(diǎn)軍校復(fù)盤也打不出來

      我軍頂級(jí)的軍事天才只有一人,他打的仗,西點(diǎn)軍校復(fù)盤也打不出來

      秀心文雅
      2026-03-27 10:13:04
      “吳京水腫”登熱搜:臉上一按一個(gè)坑驚呆網(wǎng)友

      “吳京水腫”登熱搜:臉上一按一個(gè)坑驚呆網(wǎng)友

      TVB的四小花
      2026-03-27 16:53:30
      小鵬汽車將更名

      小鵬汽車將更名

      大象新聞
      2026-03-27 18:49:05
      伊朗官媒發(fā)布《為眾人復(fù)仇》AI短片:一枚伊朗導(dǎo)彈在哈梅內(nèi)伊等人注視下,精準(zhǔn)炸毀幻化成羊頭惡魔的美國(guó)自由女神像

      伊朗官媒發(fā)布《為眾人復(fù)仇》AI短片:一枚伊朗導(dǎo)彈在哈梅內(nèi)伊等人注視下,精準(zhǔn)炸毀幻化成羊頭惡魔的美國(guó)自由女神像

      大象新聞
      2026-03-26 09:45:03
      一個(gè)月允許吃幾次他達(dá)拉非?這樣服用,高效擺脫ED困擾

      一個(gè)月允許吃幾次他達(dá)拉非?這樣服用,高效擺脫ED困擾

      哆啦程醫(yī)生
      2026-03-27 18:20:23
      NBA MVP榜:文班反超亞歷山大登頂榜首,東契奇跌至第四

      NBA MVP榜:文班反超亞歷山大登頂榜首,東契奇跌至第四

      懂球帝
      2026-03-27 21:25:06
      狗仔爆料:當(dāng)年張凌赫還沒紅的時(shí)候,氣質(zhì)很素,身邊白鹿陪伴

      狗仔爆料:當(dāng)年張凌赫還沒紅的時(shí)候,氣質(zhì)很素,身邊白鹿陪伴

      TVB的四小花
      2026-03-27 12:30:49
      愧對(duì)巴西10號(hào)!維尼修斯演砸了:0球0射正 萬人呼喚內(nèi)馬爾

      愧對(duì)巴西10號(hào)!維尼修斯演砸了:0球0射正 萬人呼喚內(nèi)馬爾

      葉青足球世界
      2026-03-27 08:05:32
      國(guó)際油價(jià)暴跌!3月24日,全國(guó)各地各大加油站92號(hào)汽油、95號(hào)汽油、98號(hào)汽油最新油價(jià)

      國(guó)際油價(jià)暴跌!3月24日,全國(guó)各地各大加油站92號(hào)汽油、95號(hào)汽油、98號(hào)汽油最新油價(jià)

      吉林烏拉侯
      2026-03-25 02:56:11
      張雪峰追悼會(huì):遺像被鮮花包裹,員工穿黑衣,女兒和奶奶讓人心疼

      張雪峰追悼會(huì):遺像被鮮花包裹,員工穿黑衣,女兒和奶奶讓人心疼

      陳意小可愛
      2026-03-27 17:39:49
      奔馳官宣:S級(jí)將在華投產(chǎn)!在2026年底

      奔馳官宣:S級(jí)將在華投產(chǎn)!在2026年底

      網(wǎng)上車市
      2026-03-26 21:41:53
      突然爆火,一天一個(gè)價(jià)!福州市場(chǎng)價(jià)格普遍上漲2~3倍!網(wǎng)友:趕緊回家看看……

      突然爆火,一天一個(gè)價(jià)!福州市場(chǎng)價(jià)格普遍上漲2~3倍!網(wǎng)友:趕緊回家看看……

      環(huán)球網(wǎng)資訊
      2026-03-26 14:44:06
      韓媒:中國(guó)完勝世界杯參賽隊(duì),有望在未來重回亞洲強(qiáng)隊(duì)行列

      韓媒:中國(guó)完勝世界杯參賽隊(duì),有望在未來重回亞洲強(qiáng)隊(duì)行列

      懂球帝
      2026-03-27 16:37:05
      特朗普訪華時(shí)間終于確定,為什么是5月14日?三個(gè)信號(hào)值得關(guān)注

      特朗普訪華時(shí)間終于確定,為什么是5月14日?三個(gè)信號(hào)值得關(guān)注

      羅富強(qiáng)說
      2026-03-26 20:11:48
      想拿中國(guó)尿素救春耕?先把欠中企的百億欠款還了!否則一粒不售

      想拿中國(guó)尿素救春耕?先把欠中企的百億欠款還了!否則一粒不售

      過期少女致幻錄
      2026-03-26 11:44:43
      2026-03-27 21:40:49
      野生運(yùn)營(yíng)
      野生運(yùn)營(yíng)
      懂點(diǎn)產(chǎn)品,懂點(diǎn)AI,正在努力給平淡日子搞點(diǎn)新花樣。
      275文章數(shù) 2關(guān)注度
      往期回顧 全部

      科技要聞

      楊植麟張鵬夏立雪羅福莉,聊龍蝦、聊漲價(jià)

      頭條要聞

      男生欲性侵15歲女同學(xué)將其殺害 事后去事發(fā)地查看情況

      頭條要聞

      男生欲性侵15歲女同學(xué)將其殺害 事后去事發(fā)地查看情況

      體育要聞

      邵佳一:足球就像一場(chǎng)馬拉松

      娛樂要聞

      范瑋琪加盟,官宣《浪姐7》遭全網(wǎng)抵制

      財(cái)經(jīng)要聞

      我在小吃培訓(xùn)機(jī)構(gòu)學(xué)習(xí)“科技與狠活”

      汽車要聞

      與眾08,金標(biāo)大眾不能輸?shù)囊粦?zhàn)

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

      家居
      旅游
      手機(jī)
      數(shù)碼
      游戲

      家居要聞

      曲線華爾茲 現(xiàn)代簡(jiǎn)約

      旅游要聞

      “納西歌舞+目瑙縱歌”,周末來這里遇見最美民族風(fēng)

      手機(jī)要聞

      華為鴻蒙HarmonyOS 6沉浸光感視效更至2.0版本,效果三檔可調(diào)

      數(shù)碼要聞

      哈趣Ace1:百元價(jià)位千元體驗(yàn),IP67防護(hù)+杜比級(jí)聲場(chǎng)的全能耳夾耳機(jī)

      PS5國(guó)行版官宣漲價(jià)!Pro版高達(dá)6299元!

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