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。
留言
張貼留言