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。

留言

這個網誌中的熱門文章

考績被打差了 輕率離職會更傷

Arrays - DS (Reverse array) [Easy]

AI for everyone coursera