基於.NET 的WebSocket 的簡單實例 --- 數據格式

上一篇咱們已經在服務器和客戶端之間創建起一個能雙向通信的途徑,若是你立刻按之前的經驗直接丟送數據,恭喜,數據能過去,可你卻根本不認識,這是天然,他的地盤他要作主,websocket 有其本身約定的數據格式,咱們必須按照這個格式來才行的。

協議這玩意,非常枯燥,只能用,不能創新,但多瞭解一些這種規則,對之後咱們定義傳輸協議有很強的參考價值,因此咱們仍是得認真瞧瞧。html

 
找到以下圖所示的位置,這裏面有詳細的說明

 

具體每一個字段的說明,你們能夠慢慢啃英文,咱們就討論一下,如何將這玩意,在咱們的系統中使用吧。web

先用個人語言理解一下這個格式,有什麼不正確歡迎你們指正。
這個格式中,最重要的就是第二個字節:

 

1.第一位決定是否有掩碼,若是Mask爲1,就會有後面那個4字節的Masking-Key,客戶發送過來的數據,都有個這值,因此當我嘗試發送一個空串過來的時候,服務器會收到相似以下的數據:(以2進制顯示,方便你們瞭解)。

傳輸的數據,採用掩碼的異或運算來產生,好比我發送一個字符1,服務器會收到以下數據:
1000 0001 1000 0001 0011 1100 1001 0111 0011 1001 1010 1111 0000 1101
若是Mask爲0,則不會有後面的掩碼

 

2.後7位是用來決定這個幀的長度,重點爲原文中的這一句話:
Payload length:  7 bits, 7+16 bits, or 7+64 bits
若是這7位表示的長度小於126,則此即發送數據的實際長度
若是等於126,則後面兩個字節表示長度,即7+16Bits的意思
若是等於127,則後面的8字節表示長度,即7+64Bits的意思
數據傳輸協議,就應該合理的使用每個數據位,雖然感受理解累些,但卻能減小數據傳輸的數量,這就咱們大設計協議的時候,應該好好學習的。
相關文章
相關標籤/搜索