厦门网站j建设,如何搭建wordpress商城,网站设计公司,小程序转换成网页什么是protobuf
protobuf全称Protocol Buffers#xff0c;由Google推出的一种平台、语言无关的数据交互格式#xff0c;目前使用最广泛的一种数据格式#xff0c;尤其在网络传输过程中#xff0c;有很强的安全性#xff0c;而且数据量比json和xml要小很多。 最主要的是pr…什么是protobuf
protobuf全称Protocol Buffers由Google推出的一种平台、语言无关的数据交互格式目前使用最广泛的一种数据格式尤其在网络传输过程中有很强的安全性而且数据量比json和xml要小很多。 最主要的是protobuf支持的语言非常多不管你是.netjavaluaiOSandroidpythongo等等等等。都可以支持互相通信。 我们之前的游戏框架都是lua的所以protobuf用的也都是lua版本的。最近转用C#写框架了所以需要一套.net端的protobuf所以把踩得坑总结下来。
protobuf库选择
protobuf的.net实现主要有两个版本 (Google.Protobuf](https://github.com/protocolbuffers/protobuf) Google官方维护项目前身是protobuf-csharp-port。 优势在多平台协作开发时定义一份协议可以在各个语言中共用。 protobuf-net 社区维护主要由Marc Gravell管理维护 优势相对来说更符合.net开发习惯对于纯粹的.NET程序使用起来更加方便
google.protobuf使用
如果使用google版本的那么就可以使用官方提供的最新的语法最新的工具等等官方文档 库下载 安装Nuget包Google.Protobuf和Google.Protobuf.Tools .proto生成.cs代码工具 直接使用tools中或者从github下载最新的protoc。因google把全平台的proto都整合了统一通过protoc.exe来生成。 生成命令或可参考https://protobuf.dev/reference/csharp/csharp-generated/
protoc --proto_pathbar --csharp_outsrc --csharp_optbase_namespaceExample player.proto序列化示例
public void SimplestUse()
{Player player new Player ();player.ID 2;player.Name 测试 Google.ProtoBuf;using (MemoryStream memoryStream new MemoryStream()){player.WriteTo(memoryStream);}
}protobuf-net使用
使用protobuf-net版本是目前大多数C#项目所选择的方向原因大概率是语法习惯比较友好吧。protobuf-net的数据类不仅可以通过.proto生成还可以手写。不过我觉得可能手写有点太麻烦了。网络交互肯定还是要和服务器公用.proto文件的。 示例
using ProtoBuf;
namespace Test
{[ProtoContract]public class Player{[ProtoMember(1)]public int ID { get; set; }[ProtoMember(2)]public string Name { get; set; }}
}安装Nuget包protobuf-net和protobuf-net.ProtoGen 目前这两个文件除了Nuget我还没有找到纯正的官方途径下载。不过protobuf-net最近没啥更新所以从哪里下载都是一样的。 生成命令
protogen.exe -i:player.proto -o:player.cs序列化示例
public void SimplestUse()
{Player player new Player ();player.ID 1;player.Name 测试 protobuf-net;using (MemoryStream memoryStream new MemoryStream()){ProtoBuf.Serializer.Serialize(memoryStream, player);}
}性能比较
两个库直接性能差距并不是很大测试数据参考https://www.shisujie.com/blog/Google-ProtoBuf-vs-ProtoBuf-Net
最后
Unity技术开发干活 - 总目录
Unity精选 - 专栏目录
Unity之ASE入门到精通 - 专栏目录
UniRx入门到精通 - 专栏目录