SSE (Server-Sent Events)

 淺談 Server-Sent Events

與 Server 互動

一般的 get/post request 都是基於 HTTP 的標準根據請求來回覆回應的,一旦回應完成連線就會中斷。但如果有些更複雜的需求需要讓後端發送訊息給前端,比較好的方式就是建立 websocket,讓 request 保持連線。不過有時候為了一個需求要建立 websocket 會有點麻煩。因此 Server-Sent Events 就是為了這種需求而誕生的。


Server-Sent Events

以下簡稱 SSE。若說 websocket 是雙向溝通的話,SSE 其實是單向溝通的,也就是說,一但連線建立之後,就只能接收 Server 端來的訊息。實際的使用情境例如:



上傳超大檔案需要通知 client 端上傳處理進度。

轉檔需要通知 client 端處理進度。

非同步的商業邏輯處理需要通知 client 端狀況。


從 Server 傳送訊息

要從 Server 傳送訊息也蠻簡單的,只要在 response 宣告 header 。


Content-Type: "text/event-stream"


建立好連線之後就可以接收 SSE 的訊息做後續的處理。


限制

SSE 的限制是


有限的連線數。

只能處理基本 text 的訊息,

不能自訂 custom header ,例如要傳 Authorization 就不行。這個問題其實蠻大的,因為通常會需要做這種需求都會需要驗證使用者登入狀態,用 header 來處理 auth。

留言

這個網誌中的熱門文章

Kiro 教學

Playwright MCP VS Playwright test MCP

oo xx ail