目錄
什麼是Server-Sent Events?
如何設置服務器端支持SSE?
常見問題和注意事項
什麼時候該用SSE 而不是WebSocket?
首頁 web前端 H5教程 使用HTML5服務器量事件(SSE)接收實時數據。

使用HTML5服務器量事件(SSE)接收實時數據。

Jul 02, 2025 pm 04:46 PM
html5 sse

Server-Sent Events(SSE)是HTML5提供的服務器向瀏覽器推送實時更新的輕量級方案。它通過HTTP長連接實現單向通信,適合股票行情、通知等場景。使用時創建EventSource實例並監聽消息:const eventSource = new EventSource('/stream'); eventSource.onmessage = function(event) { console.log('收到消息:', event.data); }; 服務器端需設置Content-Type為text/event-stream,保持連接打開,並按格式輸出data: 內容\n\n。常見註意事項包括:1. 配置CORS解決跨域問題;2. 控制retry時間實現自動重連;3. 使用event: 定義自定義事件類型;4. 管理連接超時防止資源洩漏。相比WebSocket,SSE更簡單易用,支持HTTP協議穿透防火牆,但僅限單向通信且兼容性略差,適用於無需頻繁交互的實時推送場景。

Receiving real-time data with HTML5 Server-Sent Events (SSE).

在web 開發中,如果你需要從服務器向瀏覽器推送實時更新,HTML5 提供了一個輕量級的解決方案:Server-Sent Events(SSE)。相比WebSocket,它更簡單、更容易實現,尤其適合只需要服務器向客戶端單向通信的場景。

Receiving real-time data with HTML5 Server-Sent Events (SSE).

什麼是Server-Sent Events?

Server-Sent Events 是HTML5 的一部分,允許服務器通過HTTP 長連接將數據推送到瀏覽器。與傳統的輪詢方式不同,SSE 在建立連接後會保持打開狀態,服務器可以隨時發送新數據,比如股票行情、實時通知或聊天消息。

Receiving real-time data with HTML5 Server-Sent Events (SSE).

它的基本使用方式是創建一個EventSource實例,並指向服務器端的一個URL:

 const eventSource = new EventSource('/stream');
eventSource.onmessage = function(event) {
    console.log('收到消息:', event.data);
};

只要服務器持續發送數據,客戶端就能不斷接收。

Receiving real-time data with HTML5 Server-Sent Events (SSE).

如何設置服務器端支持SSE?

不同的後端語言有不同的實現方式,但核心要點是一樣的:保持連接打開,並按照SSE 的格式輸出內容。

以Node.js Express 為例:

 app.get('/stream', (req, res) => {
    res.setHeader('Content-Type', 'text/event-stream');
    res.setHeader('Cache-Control', 'no-cache');

    // 模擬發送數據setInterval(() => {
        res.write(`data: ${new Date()}\n\n`);
    }, 1000);
});

關鍵點:

  • 設置正確的響應頭,特別是text/event-stream
  • 不要過早結束響應,保持連接打開
  • 數據格式必須是data: 内容\n\n ,兩個換行符表示一條消息結束

其他語言如Python(Flask)、PHP 或Java Spring Boot 也可以類似地實現。


常見問題和注意事項

1. 跨域問題如果前端和後端不在同一個域名下,需要配置CORS,確保允許EventSource發起的請求:

 Access-Control-Allow-Origin: *

或者指定具體域名。

2. 自動重連機制當連接中斷時,瀏覽器會自動嘗試重新連接,默認等待時間是3 秒。你可以在服務器端控制這個間隔:

 retry: 5000

3. 自定義事件類型除了默認的onmessage ,你還可以定義其他事件名:

 event: update
data: {"type": "news", "content": "新消息來了"}

前端監聽:

 eventSource.addEventListener('update', function(event) {
    console.log('收到更新:', event.data);
});

4. 連接超時與資源釋放注意不要讓連接無限期掛起。服務器應有機制檢測客戶端是否斷開,並及時釋放資源,避免內存洩漏。


什麼時候該用SSE 而不是WebSocket?

WebSocket 更強大,支持雙向通信,但複雜度也更高。如果你只需要服務器往客戶端推送信息,而且不需要頻繁交互,SSE 是更好的選擇。

優勢包括:

  • 簡化開發流程,前後端都容易實現
  • 支持自動重連
  • 可以使用標準HTTP 協議,更容易穿透防火牆

缺點也很明顯:

  • 僅支持服務器到客戶端的單向通信
  • 瀏覽器兼容性略差(IE 和舊版Edge 不支持)

基本上就這些。 SSE 並不復雜,但在實際部署中要注意連接管理、錯誤處理和性能優化。如果你只是想做個簡單的實時通知系統,SSE 是個輕量又實用的選擇。

以上是使用HTML5服務器量事件(SSE)接收實時數據。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

什麼是微數據? HTML5解釋了 什麼是微數據? HTML5解釋了 Jun 10, 2025 am 12:09 AM

MicrodataenhancesSEOandcontentdisplayinsearchresultsbyembeddingstructureddataintoHTML.1)Useitemscope,itemtype,anditempropattributestoaddsemanticmeaning.2)ApplyMicrodatatokeycontentlikebooksorproductsforrichsnippets.3)BalanceusagetoavoidclutteringHTML

HTML5 microdata:最好的在線工具 HTML5 microdata:最好的在線工具 Jun 09, 2025 am 12:06 AM

thebestonlinetoolsforhtml5microdataaregooglestructuctureddatamarkuphelperandschema.org'smarkupvalidator.1)googlestructuctuctructuctureddatama RKUPHELPERISUSER友好型,GuidinguserstoAddmicrodatatagsforenhancedseo.2)schema.org'smarkupvalidatoratorChecksmicrodatiaimplementa

HTML5中的微型數據:更好的搜索引擎排名的關鍵 HTML5中的微型數據:更好的搜索引擎排名的關鍵 Jun 12, 2025 am 10:22 AM

microdatasimprovesseobyenhancingsearchEngineNeDeNgineNeDingingAndRankingOfWebPages.1)itaddsSsemanticMeaningTohtml,aidideBetterTerexexing.2)itenablesrichsrichsnippets,增加了cloughrates.3)usecorrectschema.3)usecorrectschema.orgvverarydecept.ecob.orand.ecepbebularyand.orand.ecobulary

HTML5目標:快速入門指南 HTML5目標:快速入門指南 May 18, 2025 am 12:18 AM

html5 aimstoimprovewebaccctible,效率,效率和互動forbothusersanddevelopers.1)itreducestheneed forexternalpluginsbysupportingnativemultia.2)itenhancessemanticsemantscontrents structions structions newElements,改進SeooandCodeDeareade.3 Itmandernabily.3)

使用HTML5服務器序列事件處理重新連接和錯誤。 使用HTML5服務器序列事件處理重新連接和錯誤。 Jul 03, 2025 am 02:28 AM

使用HTML5SSE時,處理重連和錯誤的方法包括:1.了解默認重連機制,EventSource默認在連接中斷後3秒重試,可通過retry字段自定義間隔;2.監聽error事件以應對連接失敗或解析錯誤,區分錯誤類型並執行相應邏輯,如網絡問題依賴自動重連、服務器錯誤手動延遲重連、認證失效刷新token;3.主動控制重連邏輯,如手動關閉並重建連接、設置最大重試次數、結合navigator.onLine判斷網絡狀態以優化重試策略。這些措施可提升應用穩定性與用戶體驗。

HTML5中介紹的關鍵功能是什麼? HTML5中介紹的關鍵功能是什麼? Jun 19, 2025 pm 11:57 PM

HTML5introducedkeyfeaturesthattransformedwebdevelopment.1.Semanticelementslike,,andimprovedstructure,readability,andaccessibility.2.Nativemultimediasupportviaandtagseliminatedrelianceonplugins.3.Enhancedformcontrolsincludingtype="email"andr

HTML5的目的是什麼?全面的概述 HTML5的目的是什麼?全面的概述 May 18, 2025 am 12:17 AM

HTML5的目標是改進網頁的語義結構、增強多媒體支持和確保跨平台兼容性。 1)通過引入、等語義元素,提升網頁的可訪問性和結構化。 2)使用和元素簡化多媒體嵌入,減少對插件的依賴。 3)通過響應式設計和CSS3,實現跨設備的兼容性和用戶體驗優化。

HTML5輸入類型:它可以提高可訪問性嗎? HTML5輸入類型:它可以提高可訪問性嗎? Jun 20, 2025 am 12:49 AM

Yes,HTML5inputtypesimproveaccessibilitybyprovidingsemanticmeaningtoassistivetechnologies.1)Emailinputtypeoptimizeskeyboarddisplayandscreenreaderannouncements.2)Dateinputtypeoffersacalendarwidget,aidinguserswithmotordisabilitiesandensuringconsistentda

See all articles