html5 - side - stop eventsource




WebSockets與Server-Sent事件/ EventSource (5)

Websocket VS SSE

網絡套接字 -它是一種通過單個TCP連接提供全雙工通信信道的協議。 例如,服務器和瀏覽器之間的雙向通信由於協議更複雜,服務器和瀏覽器必須依賴socket.sio的websocket庫

Example - Online chat application.

SSE(服務器發送的事件) -在服務器發送事件的情況下,通信僅從服務器執行到瀏覽器,瀏覽器無法將任何數據發送到服務器。 這種通信主要用於需要僅顯示更新數據的情況,然後服務器在數據更新時發送消息。 例如服務器到瀏覽器之間的單向通信。 這個協議並不復雜,所以不需要依靠外部庫JAVASCRIPT本身提供的EventSource接口來接收服務器發送的消息。

Example - Online stock quotes or cricket score website.

WebSocketsServer-Sent Events都可以將數據推送到瀏覽器。 對我來說,他們似乎是競爭技術。 他們有什麼區別? 你什麼時候選擇一個呢?


Opera,Chrome,Safari支持SSE,Chrome,Safari支持SSE內部的SharedWorker Firefox支持XMLHttpRequest readyState交互,所以我們可以為Firefox製作EventSource polyfil


Here是關於網絡套接字和服務器發送事件之間差異的討論。 從Java EE 7開始, WebSocket API已經是規範的一部分,並且似乎服務器發送的事件將在next版企業版中發布。


最大連接限制不是http2 + sse的問題。

這是http 1上的一個問題


根據caniuse.com:

您可以使用僅客戶端的polyfill將SSE的支持擴展到許多其他瀏覽器。 WebSockets的可能性較小。 一些EventSource填充:

如果您需要支持所有瀏覽器,請考慮使用像web-socket-jsSignalRsocket.io這樣的庫,它支持多種傳輸方式,例如WebSockets,SSE,Forever Frame和AJAX長輪詢。 這些通常也需要對服務器端進行修改。

了解更多關於SSE的信息:

通過以下網址了解更多關於WebSockets

其他差異:

  • WebSockets支持任意的二進制數據,SSE只使用UTF-8




server-sent-events