簡體   English   中英

服務器發送事件vs Web套接字?

[英]Server sent event vs web sockets?

我正在開發一個網絡應用程序,用戶可以通過從智能手機到桌面的多個平台訪問這些應用程序,有時需要在兩個客戶端之間進行通信,例如,如果我希望我的朋友加入我的網絡,我會向他發送朋友請求但是我希望我的朋友能夠看到該請求而無需刷新頁面。

在這種情況下,這將是一個更好的選擇? 此外,我希望這個可以在盡可能多的平台和瀏覽器上工作,這些平台和瀏覽器有更多的瀏覽器支持? 有更好的選擇嗎?

做出這個選擇時要記住一些事情。

  • 嘗試通過WebSocket連接獲取內容是一個糟糕的設計決策,因為WebSockets是嵌套在HTTP連接中的不同協議,它不能利用緩存(瀏覽器和CDN)。
  • 某些較舊的代理不會傳遞Websocket連接,除非它隱藏在安全連接中,而Server Sent Events仍然是HTTP連接,並且不會受此影響。
  • 在4.4之前(當他們切換到使用Chrome時)本機Android瀏覽器中既不支持WebSockets也不支持SSE - 因此,如果您正在考慮使用混合移動應用程序,則需要回退,例如SocketIO,因為在撰寫本文時,4.4是只有20%的市場和混合應用程序使用原生Android瀏覽器。
  • WebSockets是移動設備上最節省電池的協議,因為所有其他選項都需要許多HTTP連接,並且重復協商標頭會增加CPU負擔並耗盡電池電量。

另一種選擇可能是通知。 所有移動設備現在都支持可以定位到應用程序的通知,並且還有許多瀏覽器。 在所有情況下,從客戶端到消息中心(Apple,Google,Microsoft等)已經存在連接,並且所有通知都通過此通道發送。

以下是WebSockets與SSE的完整概述: http//www.html5rocks.com/en/tutorials/eventsource/basics/

  • 服務器發送事件:僅用於發送文本消息的持久連接服務器2-客戶端,並且在所有主要瀏覽器中實現,但是Internet Explorer。 如果連接丟失,它可以重新連接。 http://caniuse.com/eventsource

  • WebSokets:能夠傳輸UTF8文本和二進制數據的全雙工持久連接。 http://caniuse.com/websockets

WebSocket更好,未來。

據我所知,SSE更簡單,更容易實現,而WebSockets提供雙向數據傳輸,但是您需要了解自己的協議/ API以利用它們。 老實說,我從來沒有真正打過SSE, Socket.IO確實需要我所需要的所有實時網絡應用程序通信相當容易,並構建為跨瀏覽器。

如果您只是希望他能夠看到通知,那么SSE應該沒問題。 如果您希望他能夠從同一頁面回復您的朋友請求,那么讓服務器向您發送他已被接受的通知,您可能希望使用WebSockets實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM