在 APP 和小程序搶購場景中,通常不原生支持SSE(Server-Sent Events),這與瀏覽器對 SSE 的支持情況不同,具體如下:
- APP:一般情況下,APP 端不支持原生 SSE。若使用 UniApp 開發,在 App 端也不能直接使用 JavaScript 內置的 EventSource 對象來建立 SSE 連接,需要尋找其他替代方案,如使用 WebSocket 或輪詢模擬流式請求。
- 小程序:以微信小程序為例,其原生也不支持 EventSource 對象。若要實現類似 SSE 的效果,可以通過 wx.request 結合 enableChunked 特性實現分塊傳輸,模擬 SSE 流數據接收,或者使用一些墊片庫來實現。
而在瀏覽器中,大多數現代瀏覽器是支持 SSE 的,可直接使用 EventSource API 來連接 SSE 端點。不過,IE 等早期瀏覽器不支持 SSE。
SSE不就是長連接?
?????????SSE(Server-Sent Events,服務器發送事件)本質上是基于HTTP 長連接的單向通信協議,核心特征是 “客戶端發起連接后保持長連接,服務器通過該連接持續向客戶端推送數據”。
具體來說,SSE 的 “長連接” 特性體現在:
連接建立方式
客戶端通過普通 HTTP 請求(GET
方法)發起連接,請求頭中會指定Accept: text/event-stream
,告知服務器 “我要接收 SSE 流數據”。服務器響應時會返回Content-Type: text/event-stream
,并保持 TCP 連接不關閉,形成 “長連接”。數據傳輸方向
長連接建立后,僅允許服務器向客戶端單向推送數據(客戶端不能通過該連接向服務器發送數據),適合搶購結果通知、實時日志等 “服務器主動推” 的場景。連接復用與保活
長連接會持續一段時間(具體時長由服務器和客戶端的超時配置決定),期間服務器可多次推送數據(無需重新建立連接)。若連接中斷,客戶端可自動重連(SSE 的EventSource
對象默認支持重連機制)。
SSE 與其他長連接方案的區別:
方案 | 連接類型 | 數據方向 | 適用場景 |
---|---|---|---|
SSE | HTTP 長連接 | 服務器→客戶端(單向) | 搶購結果推送、實時通知 |
WebSocket | 獨立 TCP 長連接 | 雙向通信 | 聊天、實時交互(如搶購中取消) |
輪詢 | 短連接循環建立 | 客戶端→服務器(主動拉取) | 兼容性要求高的簡單場景 |
簡單說,SSE 是 “HTTP 長連接 + 單向推送” 的輕量方案,而 WebSocket 是 “獨立長連接 + 雙向通信” 的全功能方案。在搶購等 “只需服務器推結果” 的場景中,SSE 比 WebSocket 更輕量(復用 HTTP 協議棧,無需額外握手),但受限于單向通信;若需要雙向交互(如用戶中途取消搶購),則需用 WebSocket。