跨平台使用Protobuf-net

Protobuf现在已经越来越多在移动端游戏中使用,其序列化和反序列化非常方便开发者使用,如果使用Unity开发,我们该如何使用?在这里给大家总结一下:

第一步:把其中“protobuf-net”文件夹 拷贝到unity 即可。

下载地址:https://github.com/mgravell/protobuf-net

我会在后面提供给大家下载。

第二步:建立一个新的文件smcs.rsp,内容是-unsafe,注意不是下划线。

第三步:如果Unity还报错,需要我们把工程设置成.Net 2.0 subset。

通过以上设置我们的程序就可以同时在android和ios上运行。

另一种解决方式:可以不用unsafe,在PlayerSettings里的Srcripting Define Symbols里加上宏FEAT_SAFE也可以在Xcode里编译通过。

如果改成.Net 2.0还报错,可以在增加gmcs.rsp内容跟上面的一样-unsafe。

我们在程序中如何使用Protobuf,下面我们举例说明:

比如我们需要在服务器和客户端之间传输消息,我们可以这样定义:

枚举结构:

enum enumLoginGameResult
{
 LoginGame_Success = 0;
 LoginGame_error = 1;
}

消息结构定义

message LoginGame
{
 required uint32 uaid = 1;  //账号ID
 optional enumCharType type = 2;
};

消息结构体,required意思是必须要定义的,optional是可以选择的,就是说我们在使用这个消息的时候,optional可以忽略的。还有一个是repeated 这个是list表,是数组。

消息之间可以通过import"文件名"调用对应文件的函数。

比如我在 common.proto 文件里面定义了一个枚举值或者消息都可以,

我需要在login.proto,里面调用就需要在login.proto 最前面写上 import“common.proto”,然后就可以使用common.proto里面的消息或者是枚举值了。

这样定义的好处是C++或者C#都可以共同使用。

那如何使用,我们可以通过定义批处理进行,比如生成.CC和.h。批处理写法如下:

@echo off

set tool=..\Tools

rem===============

rem Support

set proto=.\common\common.proto

%tool%\protoc.exe--proto_path=.\common --cpp_out=.\common %proto%

pause

生成C#文件的批处理如下:

@echo off
set tool=..\3Party\protobuf-net\net

rem ===============================================
rem  Support
set proto=login.proto
%tool%\protogen.exe -i:%proto% -o:%proto%.cs -q

pause

以上就是关于Protobuf的使用,我已将其源代码上传到51CTO下载中心,如有需要大家可以去下载,直接将其放到Unity里面使用即可。

时间: 2024-11-03 20:47:11

跨平台使用Protobuf-net的相关文章

序列化之protobuf与avro对比(Java)

最近在做socket通信中用到了关于序列化工具选型的问题,在调研过程中开始趋向于用protobuf,可以省去了编解码的过程.能够实现快速开发,且只需要维护一份协议文件即可. 但是调研过程中发现了protobuf的一些弊端,比如需要生成相应的文件类,和业务绑定太紧密,所以在看了AVRO之后发现它完美解决了这个问题. 下面记录下对这两种序列化工具的入门与测评. 一.protobuf基本操作 protobuf简介: Protocol Buffers (a.k.a., protobuf) are Goo

EJB、RMI、XMLRPC、Hessian、Thrift 、Protobuf

Java中实现分布式的方式有:EJB.RMI.XMLRPC.Web Service.Hessian.Thrift .Protobuf.NIO(Netty.Mina) EJB 优势:可扩展性好,安全性强,支持分布式事务处理. 劣势:不能跨语言:配置相对复杂,不同J2EE容器之间很难做无缝迁移. RMI 优势:面向对象的远程服务模型:基于TCP协议上的服务,执行速度快. 劣势:不能跨语言:每个远程对象都要绑定端口,不易维护:不支持分布式事务JTA,RMI框架对于安全性.事务.可扩展性的支持非常有限.

VS下使用Google Protobuf完成SOCKET通信

如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信 出处:如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信 最近一段时间,由于项目的需要,接触到了Protobuf这个东东,在Linux环境下,体验了一把,感觉挺不错,很方便,且高效.是一个非常值得学习掌握和应用的数据抽象.平台无关.功能强大.…(此处省略1000字)的开源工具. Google虽然把Protobuf做成了跨平台.跨语言,但作为微软的死对头,它在re

google protobuf初体验

最近在读别人代码的时候发现一个的东西,名字叫protobuf, 感觉挺好用的,写在这里,留个记录.那么什么是protobuf 呢?假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件.他们用于 RPC 系统和持续数据存储系统. Protocol Buffers 是一种轻便高效的结构化

iOS网络通信之Protobuf

摘要 在不同平台通信的时候,首先需要将对象进行序列化.iOS平台上我们常用`NSKeyedArchiver`进行归档,当然也可以将数据处理为JSON或者XML格式.`NSKeyedArchiver`只能在iOS/Mac平台使用,因此它归档的二进制数据不适合于在不同平台之间使用.JSON和XML虽然由于容易维护,易读而应用比较广泛,但是对数据的利用效率都不是高.Google提出了 Protocol Buffers作为一种跨平台.语言无关的序列化数据格式.Protocol Buffers提供代码生成

C#下使用protobuf(Google Protocol Buffers)

Protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多.除了比Json.XML有速度上的优势和使用上的方便外,protocolbuf还可以做到向前兼容和向后兼容. protobuf 虽然只支持JAVA.C++和Pyton,但protobuf社区的protobuf.net组件让protobuf可以支持更多的语言,其中就包括了C#. protobuf协议 定义protobuf协议必须创建一个以.p

关于数据序列化(1)protobuf 示例

最近用protobuf来做对象的序列化(不知道我这么表达对不对),用的是百度的jprotobuf,使用注解,当然还有不使用注解的经典方式,本人没用过,发现工作中的竟然在JDK7报错(真怀疑为啥生产用JDK6,现在JDK8了都)只好在github下了最新的,当然google的jar包仍然是必须的 不过有个疑问,protobuf的好处仅仅是为了提供一个兼容跨平台的格式吗,既然最后都是讲对象存为byte[],那直接用流操作使用writeByte(),writeInt(),writeUTf(),写进by

php安装protobuf 扩展

我们知道Protocol Buffers是Google定义的一种跨语言.跨平台.可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据量小,解析效率高.感兴趣的可以访问 https://developers.google.com/protocol-buffers/docs/overview .Protocol Buffers官方只支持C++, Java, Python, C#, Go,如果想在PHP中使用Protocol Buff

基于networkcomms V3通信框架的c#服务器与java客户端进行通信之Protobuf探讨

在上一篇 基于networkcomms V3通信框架的c#服务器与java客户端进行通信探讨  中探讨了在C#端与Java端通信中传递字符,有朋友提到如果传递int类型的整数,会出现编码的问题. 到网上找到了一篇文章< 使用protobuf进行C#与Java通信 >进行学习 ,使用protobuf进行编码,传递数据,好像这样可以避免编码的问题. (虽然编码问题解决了,但是粘包问题并没有解决,有经验的朋友介绍下怎样解决粘包的问题) 服务器端基于networkcomms V3 C#通信框架. ne

Protobuf 的使用和demo (Java)

项目中有用到 protobuf 作跨平台的通信 , 自己也想写个demo学习实践一下, 于是有了本文. *这个demo是基于java开发的 1.系统环境 Windows 2.所需软件和lib 1). protoc.exe 2). protobuf-java-2.4.1.jar 3.demo简介 很简单的程序,基于java开发.功能是客户端把 "消息"(手机信息) 发送给 服务端.服务端收到消息后打印. 4.开发流程 1). 定义"消息"的结构,即书写接口定义文件(.