1. 程式人生 > >網路通訊-----使用瀏覽器進行全雙工通訊的 WebSocket

網路通訊-----使用瀏覽器進行全雙工通訊的 WebSocket

    利用 Ajax 和 Comet 技術進行通訊可以提升 Web 的瀏覽速度。 但問題在於通訊若使用 HTTP 協議, 就無法徹底解決瓶頸問題。 WebSocket網路技術正是為解決這些問題而實現的一套新協議及 API。當時籌劃將 WebSocket 作為 HTML5 標準的一部分, 而現在它卻逐漸變成了獨立的協議標準。 WebSocket 通訊協議在 2011 年 12 月 11 日,被 RFC 6455 - The WebSocket Protocol 定為標準。

1.WebSocket 的設計與功能

    WebSocket, 即 Web 瀏覽器與 Web 伺服器之間全雙工通訊標準。 其中, WebSocket 協議由 IETF 定為標準, WebSocket API 由 W3C 定為標準。 仍在開發中的 WebSocket 技術主要是為了解決 Ajax 和 Comet裡 XMLHttpRequest 附帶的缺陷所引起的問題。

2.WebSocket 協議

    一旦 Web 伺服器與客戶端之間建立起 WebSocket 協議的通訊連線,之後所有的通訊都依靠這個專用協議進行。 通訊過程中可互相傳送JSON、 XML、 HTML或圖片等任意格式的資料。由於是建立在 HTTP 基礎上的協議, 因此連線的發起方仍是客戶端,而一旦確立 WebSocket 通訊連線, 不論伺服器還是客戶端, 任意一方都可直接向對方傳送報文。     下面我們列舉一下 WebSocket 協議的主要特點。    a.推送功能     支援由伺服器向客戶端推送資料的推送功能。 這樣, 伺服器可直接傳送資料, 而不必等待客戶端的請求。    b.減少通訊量

    只要建立起 WebSocket 連線, 就希望一直保持連線狀態。 和 HTTP 相比, 不但每次連線時的總開銷減少, 而且由於 WebSocket 的首部資訊很小, 通訊量也相應減少了。為了實現 WebSocket 通訊, 在 HTTP 連線建立之後, 需要完成一 次“握手”( Handshaking) 的步驟。握手·請求     為了實現 WebSocket 通訊, 需要用到 HTTP 的 Upgrade 首部欄位, 告知伺服器通訊協議發生改變, 以達到握手的目的。

    Sec-WebSocket-Key 欄位內記錄著握手過程中必不可少的鍵值。     Sec-WebSocket-Protocol 欄位內記錄使用的子協議。子協議按 WebSocket 協議標準在連線分開使用時, 定義那些連線 的名稱。握手·

響應     對於之前的請求, 返回狀態碼 101 Switching Protocols 的響應。

    Sec-WebSocket-Accept 的欄位值是由握手請求中的 Sec-WebSocket-Key 的欄位值生成的。     成功握手確立 WebSocket 連線之後, 通訊時不再使用 HTTP 的資料幀, 而採用 WebSocket 獨立的資料幀。

WebSocket API

JavaScript 可呼叫“The WebSocket API”( http://www.w3.org/TR/websockets/, 由 W3C 標準制定) 內提供的 WebSocket 程式介面, 以實現 WebSocket 協議下全雙工通訊。 以下為呼叫 WebSocket API, 每 50ms 傳送一次資料的例項。

轉:《圖解HTTP》