利用Protobuf开发网络游戏
  EFTJ6596AiAP 2023年11月02日 116 0

Protobuf概览

介绍

是一个跨语言、跨平台、可扩展的用来序列化结构数据的方法。类似于XML。

一些名词解释:

  • 序列化:对象——二进制数据作为字节流
  • 反序列化:二进制数据——对象

比较

替代的解决方案是xml、json、thrift等,这里和最常用的jason做个对比。

Protobuf

jason

NuGet包名

Google.Protobuf.Tool

System.Text.Json

通用性

需要专门的解析库,支持的语言没有jason多

无法应用于https的应用场景

可以支持任何一门语言

可读性

可读性较差

可读性较差

效率

理论上效率更高

不如Protobuf

使用过程

使用的时候必须写一个IDL(Interface Description Language),预先在里面定义好数据结构,只有定义好了才能进行序列化和反序列化。

  • 创建.proto文件,定义数据结构
  • 编译.proto文件生成读写接口
  • 调用接口实现序列化、反序列化以及读写


实践案例

在正式利用protobuf定义数据格式之前,我们需要在VS中找到Google.ProtoBuf.Tool的NuGet包并且安装。

第一步:创建proto文件

proto的message中可以包含枚举、和嵌套的数据格式,以下是一个例子

syntax = "proto3";
package hello;
option go_package = "ShopBefore/rpc/helloword/proto;hello";

message HelloRequest{
string name = 1;
int32 age = 2;
repeated string courses = 3;
}

enum Time {
Monday = 0;
Friday = 1;
}
message Info {
required address = 1;
required meal = 2;
optional string des = 3;
}
message Invite {
required string host = 1;
required string name = 2;
required Time time = 3;
required Info info = 4;
}

第二步:编译proto文件

通过内置的 protoc 编译器对 protobuf 文件进行编译

第三步:调用接口实现读写


参考文献

​​​​https://blog.csdn.net/qq_31347869/article/details/93189219​

​https://blog.csdn.net/weixin_43947901/article/details/109674017?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-109674017-blog-98527794.pc_relevant_multi_platform_whitelistv4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-109674017-blog-98527794.pc_relevant_multi_platform_whitelistv4&utm_relevant_index=3​


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

EFTJ6596AiAP