Protobuf是目前移動端網(wǎng)絡(luò)開發(fā)的主流數(shù)據(jù)交互協(xié)議.
ProtoBuf也叫Google-protobuf,只支持Java盛泡、C++和python,后人又做了支持C#的Protobuf-net.
有特有的語法
和Json一樣都可以作為數(shù)據(jù)交換,如:前端-->后端,對應C#->proto->java
(1)message:表示一個消息(相當于C#的類class),一個message當中可以有很多字段,每個字段都需要一個分配標識符號,分配標識符可以是1~536,870,911,不能是(19000~19999)的標識號,舉個栗子
message c2s_login_game_request
{required string account =1;
required string account =2;}
1,2是分配標識號
(2)字段修飾符
required:表示該字段是必須賦值的
optional:表示該字段可以選擇賦值,設(shè)置默認值可以用[default = xxx]
repeated:表示該字段可以有一個或一個以上的值,對應C#當中的List集合
(3)可以設(shè)置枚舉值,放在message內(nèi)外都可以,每條枚舉值之間用逗號隔開
(4)使用ProtoGen將proto文件轉(zhuǎn)換成C#文件,(點擊CreatCsharp.bat)
(5)需要將protobuf-net放入Unity工程中,然后就可以在腳本中引入命名空間using?proto.文件名(proto文件的名字)
(6)使用socket傳輸數(shù)據(jù)需要用bytes,這就需要將編寫的C#文件序列化.反之,接收服務(wù)器傳來的socket的byte文件也需要反序列化成C#文件.
(6.0)編寫序列化和反序列化的腳本不需要繼承MonoBehaviour,需要引入ProtoBuf/System.IO命名空間(有帶有stream/memory/文件?的都要引入System.IO命名空間)
(6.1)序列化
? //?此處的IExtensible是由proto生成的對象
// 使用了using關(guān)鍵字,表示此stream在using作用域結(jié)束時自動釋放
(6.2)反序列化
(7)在一個proto文件中引入其他的proto文件: improt "othersName.proto";
(7.1)轉(zhuǎn)化時應該注意在cs文件夾中放入這兩個proto文件,且在ProtoGen根目錄里放被引用的文件.然后CreatCsharp
(7.2)得到的cs文件放入unity會報錯,需要添加using?proto.othersName;
(7.3)