本文由藍鷗VR/AR/游戲學科高級講師原創,全篇干貨,深度好文。
ProtoBuf是Google公司推出的一種二進制序列化工具,適用于數據的網絡傳輸?;赟ocket實現時時通信,關于數據粘包的編碼和解碼處理是必不可少的。
Unity版本:5.3
使用語言:C#
一、Unity中使用ProtoBuf
實現功能
1.基于ProtoBuf序列化對象
2.使用Socket實現時時通信
3.數據包的編碼和解碼
導入DLL到Unity中>>>創建網絡傳輸的模型類
在Unity中添加測試腳本,介紹ProtoBuf工具的使用。中間用到了流這個概念,對于此概念不熟悉的同學先去我的簡書學習。
二、Unity中使用Socket實現時時通信
通信應該實現的功能:
1.服務器可以時時監聽多個客戶端
2.服務器可以時時監聽某一個客戶端消息
3.服務器可以時時給某一個客戶端發消息
首先我們需要定義一個客戶端對象
然后實現我們的服務器代碼
在Unity中開啟服務器,并使用C#控制臺模擬客戶端連接、發送消息操作。測試OK,Unity中可以時時監聽到消息。
三、數據包的編碼和解碼
首先,舉個例子,這個月信用卡被媳婦刷爆了,面對房貸車貸的壓力,我只能選擇分期付款。
那么OK了,現在我想問一下,當服務器向客戶端發送的數據過大時怎么辦呢?
當服務器需要向客戶端發送一條很長的數據,也會“分期付款!”,服務器會把一條很長的數據分成若干條小數據,多次發送給客戶端。
可是,這樣就又有另外一個問題,客戶端接受到多條數據之后如何解析?
這里其實就是客戶端的解碼。server發數據一般采用“長度+內容”的格式,Client接收到數據之后,先提取出長度來,然后根據長度判斷內容是否發送完畢。
再次重申,用戶在發送序列化好的消息的前,需要先編碼后再發送消息;用戶在接受消息后,需要解碼之后再解析數據(反序列化)。