现在很多协议都是通过PB来压缩和传输,网上的信息并不是特别多,经过我整理,整理一些小技巧,和常用文章。让 Protocol Buffers在C#更容易开发。
第一、简要理解
Protocol buffers 是一种语言中立,平台无关,可扩展的序列化数据的格式,可用于通信协议,数据存储等。
简而言之,PB和Json、XML、C#的序列化,是同一个概念,特点是:
①、速度快
②、体积小
③、多平台
我们可以简单概况就是一个很快的序列化方法,便于跨平台和互联网传输,常用作为各种协议使用。
第二、.proto 文件
Proto文件是描述序列化类的一个文件,按照常规手段我们是需要编写,然而导入各种语言使用。
Proto文件并不复杂,他只是一个描述文件,描述你的协议该怎么写,序列是怎样。每个字段必须告诉他,你是第几位。颇有以前研究外挂封包的时候的的感觉。而确实,他的序列化后的包也是这样子的。
第三、C#上的使用
有两种方法
①、官方的插件,详见 https://github.com/protocolbuffers/protobuf/tree/master/csharp
②、protobuf-net 详见 https://github.com/protobuf-net/protobuf-net
第一种,是可以需要编译.proto文件来获取C#的代码,引入工程后,即可方便使用。但是此文件描述颇为复杂。对于精简的我,不太喜欢。
第二种,是直接自己创建类文件,添加描述,即可。如果大家都是在.Net平台开发,使用第二种方法来得更便捷。
我们来做一个对比
1 | message Request { |
生成代码后为
如果直接使用创建描述文件,和C#序列化无异。类似如下:
是不是差别挺大。
第四、一些参考文章和一些工具
①、在线编译工具 https://protogen.marcgravell.com/
②、protogen 工具,通过离线方式编译.PB文件 https://protogen.marcgravell.com/protogen/protogen%202.3.16.zip
③、Google 官方文档 https://developers.google.com/protocol-buffers/docs/overview 英文
④、IBM中文学习: https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html
⑤、Protobuf 终极教程(GO语言) https://colobu.com/2019/10/03/protobuf-ultimate-tutorial-in-go/#package
⑥、高效的数据压缩编码方式 Protobuf https://halfrost.com/protobuf_encode/
基本上你学习完以上6篇文章,就可以玩转Protocol Buffers。
五、小结
一开始,我对Protocol Buffers兴趣不大,还觉得是一个累赘,在想,为什么还要搞那么复杂,Json或者XMl或者CShap序列化还不好嘛?后来,我觉得我挺喜欢他的。接下来的项目也会尝试引入Protocol Buffers。