【譯】 WebSocket 協議第六章——發送與接收消息(Sending and Receiving Data)

概述

本文爲 WebSocket 協議的第六章,本文翻譯的主要內容爲 WebSocket 消息發送與接收相關內容。網絡

有興趣瞭解該文檔以前幾章內容的同窗能夠見:post

發送與接收消息(協議正文)

6.1 發送數據

爲了經過 WebSocket 鏈接發送一條 WebSocket 消息,終端必須遵循如下幾個步驟:ui

  1. 終端必須保證 WebSocket 鏈接處於 OPEN 狀態(見第 4.1 節和第 4.2.2 節)。若是 WebSocket 鏈接的任意一端的狀態發生了改變,終端必須停止如下步驟。
  2. 終端必須將數據按照第 5.2 節定義的 WebSocket 幀進行封裝。若是須要發送的數據過大或者在終端但願開始發消息時,若是數據在總體性這一點上不可用,那麼終端可能會選擇經過在第 5.4 節中定義的一系列幀來進行封裝。
  3. 包含數據的第一幀操做碼(幀操做碼)必須根據第 5.2 節中的內容設置的合適的值,以便接收者將數據解析爲文本或者二進制數據。
  4. 最後一個包含數據的幀的 FIN ( FIN 幀)字段必須和第 5.2 節中定義的同樣設置爲 1 。
  5. 若是數據被髮送到了客戶端,數據幀必須和第 5.3 節中定義的同樣添加掩碼。
  6. 若是在 WebsSocket 鏈接中有協商擴展(第 9 章),在這些擴展中的定義和注意事項也許要額外考慮。
  7. 被格式化的幀必須經過底層的網絡鏈接進行傳輸。

6.2 接收數據

爲了接收 WebSocket 數據,終端須要監聽底層網絡鏈接。輸入的數據必須經過第 5.2 節定義的 WebSocket 幀進行解析。若是收到了一個控制幀(第 5.5 節),那麼這個幀必須如 5.5 節中定義的方式進行處理。若是收到的是一個數據幀,那麼終端必須注意 5.2 節中的定義在操做碼(幀操做碼)中的數據類型。在這一幀中的「應用數據」被定義爲消息的數據。若是幀中包含未分片的數據(第 5.4 節),那麼就認爲:一條 WebSocket 消息的數據和類型被收到了。若是幀是分片數據的一部分,那麼隨後的幀包含的「應用數據」連起來就是數據的格式。當經過 FIN 字段(FIN幀)表示的最後一個片斷被收到時,咱們能夠說:一條 WebSocket 消息的數據(由片斷組裝起來的「應用數據」數據組成)和類型(注意分片消息的第一幀)已經被收到了。接下來的數據幀必須是屬於一條新的 WebSocket 消息。翻譯

擴展(第 9 章)可能改變數據如何理解的方式,具體包括消息的內容邊界。擴展,除了在「應用數據」以前添加「擴展數據」以外,也能夠修改「應用數據」(例如壓縮它)。code

像第 5.3 節中說的那樣,服務端在收到客戶端的數據幀時必須去除掩碼。orm

相關文章
相關標籤/搜索