H5中爲什麼要有websocket

在線網絡遊戲,是最重要的遊戲形式,

通過互聯網,玩家可以一起聯網對戰,能帶來很多的樂趣。

H5微信小遊戲,抖音小遊戲怎麼樣做聯網對戰和傳統的有什麼不一樣的?

 

首先我們來看傳統的聯網,我們直接用TCP socket,  而H5的標準裏面,我們用的是websocket,今天我們來說一說websocket 到底是什麼。

 

TCP socket 的代價:

     TCP是可靠的傳輸協議,這個大家都知道,怎麼實現可靠的呢?

就是發送端發送一個數據包,接收端迴應收到後,再發送下一個,這個是由操作系統 底層來實現的, 這種處理邏輯,會帶來一個問題,驗證需要代價,底層想等多一點數據,一起發過去。這樣會導致我們app 連續發送2個數據包的時候,這兩個數據包,底層會有可能一起發出去,接收端會一起收到這2個數據包。

那麼這個時候問題來了,對於app而言希望一個一個數據包處理,可是服務端收到了2個黏在一起的數據包,服務器程序也希望收到的是一個一個數據包,

但是實際卻收到2個數據包,所以我們一般的做法,是app自己給這個數據包打上標識協議,根據協議方便把2個在一起的數據包分開。

App 做數據包的標識兩種方式:

   (1)  數據大小size + 數據內容body + 校驗;

   (2)  數據內容body + 特殊的標識符號(如\r\n);

 

當我們收到一個2個數據包在一起的時候,解析數據包裏面的內容,

先讀取第一個數據包的大小,讀到數據後,根據大小可以定位下一個數據包的位置,依此類推。你使用TCP Socket ,每個裏面都會有類似的協議;

  

H5 websocket:

   其實每次些拆包封包也挺蠻煩的,所以H5提出了一個標準解決方案,這個方法就是websocket。

    (1) websocket 底層基於TCP Socket

    (2) websocket 實現了4個協議(相當於自定義拆包,封包協議):

          連接握手協議;

          關閉協議;

          發送數據協議:   包頭 + 數據內容; 

          接收數據協議:   包頭 + 數據類容;

   

 這樣得到得結果就是

    客戶端使用websocket  與服務器的websocket來相連接, 客戶端使用 ws 來發送數據,服務器,使用websocket協議來接收,接收到的就是用戶完整的數據包。自己不用實現拆包,發送數據的時候也不要使用封包了,大大的減少了用戶編寫網絡代碼的難度。

 

Websocket = (TCP socket + 拆包,封包的一個協議)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章