1. 程式人生 > >Server-sent Events和 websocket

Server-sent Events和 websocket

Server-Sent Events

執行原理

瀏覽器通過HTTP向伺服器傳送請求,伺服器端拿出資料庫中的最新的資訊,立即返回給客戶端,客戶端等待三秒後再次發出下一個請求。

實現方式
同樣,瀏覽器中HTML兩個input,JavaScript模組開啟EventSource,把接受者的id傳給服務端。
客戶端收到相應後,onMessage事件的處理器將被呼叫。瀏覽器將每3秒傳送一個請求,除非將連線關閉(Close方法)。

WebSockets

執行原理

客戶端通知WebSockets伺服器一個事件,告訴他接收者id,伺服器將立即通知訊息,當任何新的未讀訊息來的時候,伺服器都將立即返回資料給客戶端。

客戶端開啟一個WebSockets連線而且在/notification/updates上訂閱一個事件處理。在HTML中新增一個傳送向/notification/presents傳送接收者id的button。這將在所有的開啟連線中引起廣播訊息。所以每一個活躍的客戶端都收到通知,客戶端會檢查訊息中的id是否是當前登入的使用者的id,如果是就更新通知數量。

總結

瀏覽器相容性

Server-Sent Events支援Chrome9+、Firefox6+、Opera11+、Safari5+
Chrome14、Firefox7支援最新的hybi-10協議,Firefox6支援hybi-07.

伺服器負載

Server-Sent Events工作的方式有很多,除非Server-Sent Events不必在每一次響應發出後都關閉連線。
WebSockets,伺服器只需要一個程序處理所有的請求,沒有迴圈,不必為每個客戶端都分配cpu和記憶體。

客戶端負載

Server-Sent Events採用瀏覽器的內建的實現方式,只花費很少的一部分資源。
WebSockets跟Server-Sent Events一樣,採用瀏覽器的內建的實現方式,只花費很少的一部分資源。

時間線
Server-Sent Events預設延時3秒,但是可以調整。
WebSockets真正的實時

實現方式複雜度

Server-Sent Events甚至比Long-polling更簡單
需要一個WebSockets伺服器處理事件,並開放一個埠