輪詢(Polling)* 1
ex. 每 5 秒發一次請求。
- 讓瀏覽器每隔一段時間就自動送出一個 HTTP 請求(Request)給 Server,獲取最新的網頁資料。
- Request 以 JSON 或 AJAX(xhr)的方式取得最新的資料。
- 即時性的網頁應用程式上效率較差,在伺服器沒有新資料時,瀏覽器如果也送出 HTTP 請求,就會造成浪費網路資源的狀況。
Polling & WebSocket
- Polling:每五秒由瀏覽器發送一次請求。
- WebSocket:第一次由瀏覽器先註冊一次,拿到 WebSocket-Key,若 Server 有新消則會再回應給用戶。
WebSocket
建完一次連線後拿到 key,之後 Server 有需要才會回應 給 Client。
- HTML5 標準中的一個新的網頁傳輸方式。
- 全雙工、雙向的資料傳輸,即時性的網頁應用程式(ex:FB 聊天訊息)。
- 瀏覽器與伺服器之間若要建立一條 WebSocket 連線,在一開始的交握(handshake)階段中,要先從 HTTP 協定升級為 WebSocket 協定:
瀏覽器送出:
GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket #websocket協定 Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== #KEY Origin: http://example.com Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13
而伺服器回應:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat
Long Polling 1
- Facebook、Plurk 實現動態更新的方法。
- 發一個長時間等待的 Request,當 Server 端有資料 Response 時立刻斷掉、接著在發一個新的 Request。
- 與 Polling 不同之處的在於他比較有效率,可以等到 Timeout 或拿到新資料的時候在重新發送。