Unity中使用ProtocolBuffer

Unity中使用ProtocolBuffer

Unity中使用ProtocolBuffer

1、什麼是ProtocolBuffer

Google提供一個具有高效可序列化的數據交互格式。

2、ProtocolBuffer優勢

  1. 性能好/效率高
  2. 自動代碼生成:通過模板自動生成對應語言模型類
  3. 支持向後兼容和向前兼容:當客戶端和服務器同事使用一塊協議的時候, 當客戶端在協議中增加一個字節,並不會影響客戶端的使用
  4. 與平臺和語言無關(多語言支持)
  5. 擴展性好(開源)

3、使用

3.1 .Proto文件

這是protobuf提供的一種特殊的腳本,具有格式簡單、可讀性強和方便拓展的特點,所以接下來我們就是使用proto腳本來定義一個UserInfo類型。

  1. syntax ="proto3"; 

  2. package ProtoMsg; 

  3.  

  4. message UserInfo{ 

  5. int32 ID=1;//用戶ID,服務器自動生成,用戶註冊成功後返回給客戶端 

  6. string Account=2;//帳號 

  7. string Password=3;//密碼 

  8.  

  9. } 

語法:

  • required:必有的屬性
  • optional:可選屬性
  • repeated:數組

3.2 Protobuf---->C#

我們需要在Unity等C#環境使用PB就需要把如上我們定義的類型轉爲cs文件,自動生成工具如下:
Protobuf2CS

[目錄結構

通過如下.bat文件可統一將該目錄下ProtoFile下我們定義的如上UserInfo.proto文件轉爲.cs代碼

@echo off

set "PROTOC_EXE=%cd%\tool\protoc.exe"
set "WORK_DIR=%cd%\ProtoFile"
set "CS_OUT_PATH=%cd%\cs"
::if not exist %CS_OUT_PATH% md %CS_OUT_PATH%

for /f "delims=" %%i in ('dir /b protoFile "ProtoFile/*.proto"') do (
  echo gen protoFile/%%i...
  %PROTOC_EXE%  --proto_path="%WORK_DIR%" --csharp_out="%CS_OUT_PATH%" "%WORK_DIR%\%%i"
  )
echo finish... 

pause

生成後的CS文件可直接作爲模型類使用

4、使用

首先、我們需要把Google.protobuf.dll引入到工程項目中去。之後就可以用其提供的序列化和反序列化方法來直接使用。需要注意的是所有的模型類都實現了IMessage接口,因此我們可以在結髮的入口中直接通過IMessage類型來處理數據,在通過協議把他轉換爲相應定義的數據類型.

  1. byte[] userBytes= ProtobufHelper.ToBytes(user); 

  2. UserInfo userFromBytes = ProtobufHelper.FromBytes<UserInfo>(userBytes); 

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