ProtoBuf

Protobuf是目前移动端网络开发的主流数据交互协议.

ProtoBuf也叫Google-protobuf,只支持Java、C++和python,后人又做了支持C#的Protobuf-net.

有特有的语法

和Json一样都可以作为数据交换,如:前端-->后端,对应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:表示该字段可以选择赋值,设置默认值可以用[default = xxx]

repeated:表示该字段可以有一个或一个以上的值,对应C#当中的List集合

(3)可以设置枚举值,放在message内外都可以,每条枚举值之间用逗号隔开

(4)使用ProtoGen将proto文件转换成C#文件,(点击CreatCsharp.bat)

(5)需要将protobuf-net放入Unity工程中,然后就可以在脚本中引入命名空间using proto.文件名(proto文件的名字)

(6)使用socket传输数据需要用bytes,这就需要将编写的C#文件序列化.反之,接收服务器传来的socket的byte文件也需要反序列化成C#文件.

(6.0)编写序列化和反序列化的脚本不需要继承MonoBehaviour,需要引入ProtoBuf/System.IO命名空间(有带有stream/memory/文件 的都要引入System.IO命名空间)

(6.1)序列化


ProtoBuf_第1张图片

  // 此处的IExtensible是由proto生成的对象

// 使用了using关键字,表示此stream在using作用域结束时自动释放

(6.2)反序列化


ProtoBuf_第2张图片

(7)在一个proto文件中引入其他的proto文件: improt "othersName.proto";

(7.1)转化时应该注意在cs文件夹中放入这两个proto文件,且在ProtoGen根目录里放被引用的文件.然后CreatCsharp

(7.2)得到的cs文件放入unity会报错,需要添加using proto.othersName;

(7.3)


ProtoBuf_第3张图片

你可能感兴趣的:(ProtoBuf)