(chap9 基于HTTP的功能追加协议) WebSocket使用浏览器进行全双工通信
1. 概念
利用Ajax和 Comet技術進行通信可以提升Web 的瀏覽速度。但問題在于通信若使用HTTP協議,就無法徹底解決瓶頸問題。WebSocket網絡技術正是為解決這些問題而實現的一套新協議及API。
- 建立在HTTP基礎上的協議,即 Web 瀏覽器與 Web 服務器之間全雙工通信標準。
- 連接的發起方仍是客戶端, 一旦確立WebSocket通信連接,不論服務器還是客戶端,任意一方都可直接向對方發送報文,包括JSON、XML、HTML或圖片等任意格式的數據。
2. 主要特點
2.1 推送功能
服務器可直接向客戶端推送數據,不必等等其請求。
2.2 減少通信量,首部信息很少
只要建立起WebSocket連接,就希望一直保持連接狀態,和HTTP相比,不但每次連接時的總開銷減少,而且由于WebSocket的首部信息很小,通信量也相應減少了。
2. 實現過程
為了實現WebSocket通信,在HTTP連接建立之后,需要完成一次“握手”(Handshaking)的步驟。
2.1 握手·請求
為了實現WebSocket通信,需要用到HTTP的 Upgrade首部字段,告知服務器通信協議發生改變,以達到握手的目的。
GET/chat HTTP/1.1 Host: server.example.comUpgrade: websocket Connection: Upgrade Sec-webSocket-Key : dGhlIHNhbXBsZSBub25jZQ==origin: http://example.com Sec-webSocket-Protocol: chat, superchatsec-webSocket-version: 13- Sec-WebSocket-Key
字段內記錄著握手過程中必不可少的鍵值。 - Sec-WebSocket-Protocol
字段內記錄使用的子協議,子協議按 WebSocket協議標準在連接分開使用時,定義那些連接的名稱。
2.2 握手·響應
對于之前的請求,返回狀態碼101 Switching Protocols的響應。
HTTP/1.1 101 Switching ProtocolsUpgrade: websocket Connection: Upgrade Sec-webSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+x0o=Sec-webSocket-Protocol:chatSec-WebSocket-Accept的字段值是由握手請求中的Sec-WebSocket-Key的字段值生成的。
成功握手確立 webSocket連接之后,通信時不再使用HTTP的數據幀,而采用WebSocket獨立的數據幀。
2. 3. WebSocket API
JavaScript可調用“The webSocket API”( http://www.w3.org/TR/websockets/,由 W3C標準制定)內提供的 WebSocket程序接口,以實現 WebSocket協議下全雙工通信。
eg. 調用WebSocket API,每50ms發送一次數據的實例。
var socket = new webSocket ('ws://game.example.com:12010/updates'); socket.onopen = function ({ setInterval ( function(){ if (socket .bufferedAmount -= o) socket.send (getupdateData());},50); }總結
以上是生活随笔為你收集整理的(chap9 基于HTTP的功能追加协议) WebSocket使用浏览器进行全双工通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (chap9 基于HTTP的功能追加协议
- 下一篇: (chap9 基于HTTP的功能追加协议