unity3d lua protobufprotobuf 有丢包现象么

『 不要让任何事情成为你不去学习的理由!』
【转】【UNITY3D 游戏开发之五】Google-protobuf与FlatBuffers数据的序列化和反序列化
本站文章均为
原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接:
关于Protobuf 通过本文的转载和分享的相关链接,足够了解使用了,所以这里不赘述了。但是这里Himi顺便提一下“FlatBuffers” ,它是 Protocol Buffers升级版,其主要区别在于FlatBuffers在访问数据前不需要解析/拆包这一步。
这里分享一个FlatBuffers 的链接,童鞋们也可以去了解下
最后再多说一句,从同事(之前腾讯的)那里了解到,腾讯也有一套类似的框架 TSF4G,很牛x,听说FlatBuffers 这种就是参考的TSF4G做的。当然这里也放出参考链接,有兴趣的也可以去了解下:
【以下内容,均为转载】
★protobuf是啥玩意儿?
为了照顾从没听说过的同学,照例先来扫盲一把。
首先,protobuf是一个开源 项目(官方站点在“这里 ”),而且是后台很硬的开源项目。网上现有的大部分(至少80%)开源项目,要么是某人单干、要么是几个闲杂人等合伙搞。而protobuf则不然,它是鼎鼎大名的Google公司开发出来,并且在Google内部久经考验的一个东东。由此可见,它的作者绝非一般闲杂人等可比。
那这个听起来牛X的东东到底有啥用处捏?简单地说,这个东东干的事儿其实和XML 差不多,也就是把某种数据结构的信息,以某种格式保存起来。主要用于数据存储、传输协议格式等场合。有同学可能心理犯嘀咕了:放着好好的XML不用,干嘛重新发明轮子啊?!先别急,后面俺自然会有说道。
话说到了去年(大约是08年7月),Google突然大发慈悲,把这个好东西贡献给了开源社区。这下,像俺这种喜欢捡现成的家伙可就有福啦!貌似喜欢捡现成的家伙还蛮多滴,再加上 Google的号召力,开源后不到一年,protobuf的人气就已经很旺了。所以俺为了与时俱进,就单独开个帖子来忽悠一把。
★protobuf有啥特色?
扫盲完了之后,就该聊一下技术 方面的话题了。由于这玩意儿发布的时间较短(未满周岁),所以俺接触的时间也不长。今天在此是先学现卖,列位看官多多包涵 ?
◇性能好/效率高
现在,俺就来说说Google公司为啥放着好端端的XML不用,非要另起炉灶,重新造轮子。一个根本的原因是XML性能不够好。
先说时间开销:XML格式化(序列化)的开销倒还好;但是XML解析(反序列化)的开销就不敢恭维啦。俺之前经常碰到一些时间性能很敏感的场合,由于不堪忍受XML解析的速度,弃之如敝履。
再来看空间开销:熟悉XML语法的同学应该知道,XML格式为了有较好的可读性,引入了一些冗余的文本信息。所以空间开销也不是太好(不过这点缺点,俺不常碰到)。
由于Google公司赖以吹嘘的就是它的海量数据和海量处理能力。对于几十万、上百万机器的集群,动不动就是PB级的数据量,哪怕性能稍微提高 0.1% 也是相当可观滴。所以Google自然无法容忍XML在性能上的明显缺点。再加上Google从来就不缺造轮子的牛人,所以protobuf也就应运而生了。
Google对于性能的偏执,那可是出了名的。所以,俺对于Google搞出来protobuf是非常滴放心,性能上不敢说是最好,但肯定不会太差。
◇代码 生成机制
除了性能好,代码生成机制是主要吸引俺的地方。为了说明这个代码生成机制,俺举个例子。
比如有个电子商务的系统(假设用C++实现),其中的模块A需要发送大量的订单信息给模块B,通讯的方式使用socket。
假设订单包括如下属性:
--------------------------------
时间:time(用整数表示)
客户id:userid(用整数表示)
交易金额:price(用浮点数表示)
交易的描述:desc(用字符串表示)
--------------------------------
如果使用protobuf实现,首先要写一个proto文件(不妨叫Order.proto),在该文件中添加一个名为”Order”的message结构,用来描述通讯协议中的结构化数据。该文件的内容大致如下:
--------------------------------
message Order
required int32 time = 1;
required int32 userid = 2;
required float price = 3;
optional string desc = 4;
--------------------------------
然后,使用protobuf内置的编译器编译 该proto。由于本例子的模块是C++,你可以通过protobuf编译器的命令行参数(看“这里 ”),让它生成C++语言的“订单包装类”。(一般来说,一个message结构会生成一个包装类)
然后你使用类似下面的代码来序列化/解析该订单包装类:
--------------------------------
order.set_time(XXXX);
order.set_userid(123);
order.set_price(100.0f);
order.set_desc(“a test order”);
order.SerailzeToString(&sOrder);
// 然后调用某种socket的通讯库把序列化之后的字符串发送出去
// ……
--------------------------------
// 先通过网络通讯库接收到数据,存放到某字符串sOrder
// ……
if(order.ParseFromString(sOrder))
// 解析该字符串
cout && “userid:” && order.userid() && endl
&& “desc:” && order.desc() &&
cerr && “parse error!” &&
--------------------------------
有了这种代码生成机制,开发人员再也不用吭哧吭哧地编写那些协议解析的代码了(干这种活是典型的吃力不讨好)。
万一将来需求发生变更,要求给订单再增加一个“状态”的属性,那只需要在Order.proto文件中增加一行代码。对于发送方(模块A),只要增加一行设置状态的代码;对于接收方(模块B)只要增加一行读取状态的代码。哇塞,简直太轻松了!
另外,如果通讯双方使用不同的编程语言来实现,使用这种机制可以有效确保两边的模块对于协议的处理是一致的。
顺便跑题一下。
从某种意义上讲,可以把proto文件看成是描述通讯协议的规格说明书(或者叫接口规范)。这种伎俩其实老早就有了,搞过微软的COM编程或者接触过CORBA的同学,应该都能从中看到IDL(详细解释看“这里 ”)的影子。它们的思想是相通滴。
◇支持“向后兼容”和“向前兼容”
还是拿刚才的例子来说事儿。为了叙述方便,俺把增加了“状态”属性的订单协议成为“新版本”;之前的叫“老版本”。
所谓的“向后兼容”(backward compatible),就是说,当模块B升级了之后,它能够正确识别模块A发出的老版本的协议。由于老版本没有“状态”这个属性,在扩充协议时,可以考虑把“状态”属性设置成非必填 的,或者给“状态”属性设置一个缺省值(如何设置缺省值,参见“这里 ”)。
所谓的“向前兼容”(forward compatible),就是说,当模块A升级了之后,模块B能够正常识别模块A发出的新版本的协议。这时候,新增加的“状态”属性会被忽略。
“向后兼容”和“向前兼容”有啥用捏?俺举个例子:当你维护一个很庞大的分布式系统时,由于你无法同时 升级所有 模块,为了保证在升级过程中,整个系统能够尽可能不受影响,就需要尽量保证通讯协议的“向后兼容”或“向前兼容”。
◇支持多种编程语言
俺开博以来点评 的几个开源项目(比如“Sqlite ”、“cURL ”),都是支持很多种 编程语言滴,这次的protobuf也不例外。在Google官方发布的源代码中包含了C++、Java 、Python三种语言(正好也是俺最常用的三种,真爽)。如果你平时用的就是这三种语言之一,那就好办了。
假如你想把protobuf用于其它语言,咋办捏?由于Google一呼百应的号召力,开源社区对protobuf响应踊跃,近期冒出很多其它编程语言的版本(比如ActionScript、C#、Lisp、Erlang、Perl、PHP 、Ruby等),有些语言还同时搞出了多个开源的项目。具体细节可以参见“这里 ”。
不过俺有义务提醒一下在座的各位同学。如果你考虑把protobuf用于上述这些语言,一定认真评估对应的开源库。因为这些开源库不是Google官方提供的、而且出来的时间还不长。所以,它们的质量、性能等方面可能还有欠缺。
★protobuf有啥缺陷?
前几天刚刚在“光环效应 ”的帖子里强调了“要同时评估优点和缺点”。所以俺最后再来批判一下这玩意儿的缺点。
◇应用 不够广
由于protobuf刚公布没多久,相比XML而言,protobuf还属于初出茅庐。因此,在知名度、应用广度等方面都远不如XML。由于这个原因,假如你设计的系统需要提供若干对外的接口给第三方系统调用,俺奉劝你暂时不要考虑protobuf格式。
◇二进制格式导致可读性差
为了提高性能,protobuf采用了二进制格式进行编码。这直接导致了可读性差的问题(严格地说,是没有可读性)。虽然protobuf提供了TextFormat这个工具类(文档在“这里 ”),但终究无法彻底解决此问题。
可读性差的危害,俺再来举个例子。比如通讯双方如果出现问题,极易导致扯皮(都不承认自己有问题,都说是对方的错)。俺对付扯皮的一个简单方法 就是直接抓包并dump成log,能比较容易地看出错误在哪一方。但是protobuf的二进制格式,导致你抓包并直接dump出来的log难以看懂。
◇缺乏自描述
一般来说,XML是自描述的,而protobuf格式则不是。给你一段二进制格式的协议内容,如果不配合相应的proto文件,那简直就像天书一般。
由于“缺乏自描述”,再加上“二进制格式导致可读性差”。所以在配置文件方面,protobuf是肯定无法取代XML的地位滴。
★为什么俺会用上protobuf?
俺自从前段时间接触了protobuf之后,就着手把俺负责的产品中的部分数据传输协议替换成protobuf。可能有同学会问,和protobuf类似的东东也有不少,为啥独独相中protobuf捏?由于今天写的篇幅已经蛮长了,俺卖个关子,把这个话题留到“生产者/消费者模式[5]:如何选择传输协议及格式?”。俺会在后续的这个帖子里对比各种五花八门的协议格式,并谈谈俺的浅见。
1.GoogleProtoBuf开发者指南
.protobuf文件转成.cs文件方法
3. lua下使用protobuf
4. android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】
5. protobuf 小示例
? 【Unreal Engine 】 ? 【React Native】 ? 【Cocos Creator】? 【Cocos2dx】? 【C2dx-Lua】
Himi’s Book
小广告先森
小广告先森20214人阅读
Unity3D客户端(2)
在移动手机游戏开发中,目前Unity3D已成为比较主流的开发技术。
那么对于客户端服务器协议的打解包,我们有3中常用的处理方式:
1、自定义结构体:在协议中直接传输代码中自定义的结构体;这种方式的坏处是极大的增加了重复性的工作量,并且不能实现协议前后向兼容,可扩展性差;
2、json、xml等文本协议格式: 使用json、xml等文本协议作为协议格式;这种方式的好处是易于开发,方便协议前后向兼容和扩展,缺点是不能序列化,数据量大,浪费带宽;
3、推荐使用的方式: protobuf协议打解包方式;protobuf是google提出的一套开源协议,具有良好的前后向协议兼容性,易于扩展,并且具有很高的序列化和反序列化的效率,能极大的减小传输数据量的大小;
在Unity3D开发中,对于网络部分一般使用C#语言进行开发。一般推荐使用protobuf-net第三方库来进行开发。
但是不幸的是,其中使用到的JIT技术在Unity3D的IOS版本中是不能使用的,在序列化时会导致异常。
经过google网上搜索,找到一种不方便使用的解决方案如下:
但是该方案很复杂,非常不便于操作。
经过笔者自己的实验,探索出下面可用的一种解决方案:
1、从SVN上下载protbuf-net的源码:
http://protobuf-/svn/trunk/protobuf-net
2、将该目录中的所有C#源码拷贝到Unity3D中,直接使用源码而不是第三方dll;
3、此时在Unity中编译时,可能会报错说 unsafe不能使用;
4、采用如下方案可以解决: 在Assets目录下面新建&smcs.rsp文件,并在其中写入 &-unsafe&字符串,前后不加空格;
5、重新启动unity,此时我们可以发现该工程能够通过编译;
经验证,该方案在IOS设备上也是可用的。从而保证我们的protobuf能够应用在Unity移动开发中。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:95410次
积分:1157
积分:1157
排名:千里之外
原创:23篇
转载:22篇
(1)(5)(4)(2)(3)(6)(4)(9)(2)(1)(1)(2)(2)(1)(2)(1)Unity技术博客 - 基于ProtoBuf协议实现网络传输(上) - 简书
Unity技术博客 - 基于ProtoBuf协议实现网络传输(上)
Unity版本: 5.3
使用语言:
ProtoBuf是Google公司推出的一种二进制序列化工具,适用于数据的网络传输。基于Socket实现时时通信,关于数据粘包的编码和解码处理是必不可少的。
实现功能:
1.基于ProtoBuf序列化对象
2.使用Socket实现时时通信
3.数据包的编码和解码
1.Unity中使用ProtoBuf
导入到Unity中
创建网络传输的模型类
using ProtoB
//添加特性,表示可以被ProtoBuf工具序列化
[ProtoContract]
public class NetModel {
//添加特性,表示该字段可以被序列化,1可以理解为下标
[ProtoMember(1)]
public int ID;
[ProtoMember(2)]
public string C
[ProtoMember(3)]
public string M
在Unity中添加测试脚本,介绍ProtoBuf工具的使用。中间用到了这个概念,对于此概念不熟悉的同学先去我的简书学习。
using System.IO;
public class Test : MonoBehaviour {
void Start () {
//创建对象
NetModel item = new NetModel(){ID = 1, Commit = "LanOu", Message = "Unity"};
//序列化对象
byte[] temp = Serialize(item);
//ProtoBuf的优势一:小
Debug.Log(temp.Length);
//反序列化为对象
NetModel result = DeSerialize(temp);
Debug.Log(result.Message);
/// &summary&
/// 将消息序列化为二进制的方法
/// &/summary&
/// &param name="model"&要序列化的对象&/param&
private byte[] Serialize(NetModel model)
//涉及格式转换,需要用到流,将二进制序列化到流中
using (MemoryStream ms = new MemoryStream()) {
//使用ProtoBuf工具的序列化方法
ProtoBuf.Serializer.Serialize&NetModel& (ms, model);
//定义二级制数组,保存序列化后的结果
byte[] result = new byte[ms.Length];
//将流的位置设为0,起始点
ms.Position = 0;
//将流中的内容读取到二进制数组中
ms.Read (result, 0, result.Length);
} catch (Exception ex) {
Debug.Log ("序列化失败: " + ex.ToString());
/// &summary&
/// 将收到的消息反序列化成对象
/// &/summary&
/// &returns&The serialize.&/returns&
/// &param name="msg"&收到的消息.&/param&
private NetModel DeSerialize(byte[] msg)
using (MemoryStream ms = new MemoryStream()) {
//将消息写入流中
ms.Write (msg, 0, msg.Length);
//将流的位置归0
ms.Position = 0;
//使用工具反序列化对象
NetModel result = ProtoBuf.Serializer.Deserialize&NetModel& (ms);
} catch (Exception ex) {
Debug.Log("反序列化失败: " + ex.ToString());
#成功的道路没有捷径,代码这条路更是如此,唯有敲才是王道。& 相关文章 &
FlatBuffers要点
member,则vtable大小就是((N + 2) * 2) Bytes.   FB的对象区域每个成员基本上都是len+value形式。vtable内则是type id + offset形式。offset可以理解为一个伪指针,通过它可以找到每个成员。FB对每个成员进行赋值之前,要先进性alignment,然后把value转换为endian形式,FB保证这些值在不同平台上都有效。   反序列化一个对象后,访问一个对象的某个成员时,如果其序列化后的空间内没有这个成员的数据,那么就返回其默认值。同理
【转】【UNITY3D 游戏开发之五】Google-protobuf与FlatBuffers数据的序列化和反序列化
FlatBuffers在访问数据前不需要解析/拆包这一步。
这里分享一个FlatBuffers 的链接,童鞋们也可以去了解下 链接地址 .
最后再多说一句,从同事(之前腾讯的)那里了解到,腾讯也有一套类似的框架 TSF4G,很牛x,听说FlatBuffers 这种就是参考的TSF4G做的。当然这里也放出参考链接,有兴趣的也可以去了解下:链接地址
【以下内容,均为转载】 ★protobuf是啥玩意儿? 为了照顾从没听说过的同学,照例先来扫盲一把。 首先
FlatBuffers与protobuf性能比较
比PB快了9000ms左右。FB在计算时间上占优势,而PB则在内存空间上占优(相比FB,这也正是它计算时间比较慢的原因)。
上面的测试环境是在公司的linux server端和我自己的mac pro分别进行的。请手机端开发者自己也在手机端进行下测试, 应该能得到类似的结果。Google宣称FB适合游戏开发是有道理的,如果在乎计算时间我想它也适用于后台开发。
另外,FB大量使用了C++11的语法,其从idl生成的代码接口不如protubuf友好。不过相比使用protobuf时的一堆头文件和占18M之多的lib库,FlatBuffers仅仅一个"flatbuffers/flatbuffers.h"就足够了。
测试程序已经上传到百度网盘,点击这个链接即可下载。欢迎各位的批评意见。
Cap'n Proto, FlatBuffers, and SBE
:///article/p-1256478.html,性能测试只是从一个侧面比较不同组件之间的差别,从一个侧面说明一个组件的局限和优点,说明它的使用范围。从上面这篇转载的blog来看,我推荐在游戏开始时在手机端使用它。
另外如果你对FlatBuffers很感兴趣,请注意下上面红色标注部分的文字。FlatBuffers的序列化过程是从零到整体逐步构建的,而不像protobuf那样可以化整为零式的可以先构造一个整体出来,然后补充各个部分的数据。
protobuf和thrift对比
兼容 学习成本 功能单一,容易学习 功能丰富、学习成本高 文档&社区 官方文档较为丰富,google搜索protocol buffer有2000W+结果,google group被墙不能访问 官方文档较少,没有API文档,google搜索apache thrift仅40W结果,邮件列表不怎么活跃 性能对比 由于thrift功能较protobuf丰富,因此单从序列化机制上进行性能比较,按照序列化后字节数、序列化时间、反序列化时间三个指标进行,对thrift的二进制、压缩、protobuf三种格式
FlatBuffers vs Protocol Buffers
FlatBuffers去年发布,最近看了一下,与同是出自Google之手的Protocol Buffers非常类似。在官网上介绍,FlatBuffers(简称FB)主要针对game development和对性能有要求的应用。相对于Protocol Buffers(简称PB),FB不需要解析,只通过序列化后的二进制buffer即可完成数据访问。 FB的主要特点有: 1)数据访问不需要解析 将数据序列化成二进制buffer,之后的数据访问直接读取这个buffer,所以读取的效率很高。 2)内存
FlatBuffers初体验
1. 从github上将其签下: /google/flatbuffers/archive/master.zip 2. 编译, 用的是cmake. 好像不能识别环境变量, 得手动改一下CMAKE_CXX_COMPILER/CMAKE_C_COMPILER, 默认是c++和c.
感觉还真不如make方便.
3. 编写fbs, 非常简单. table Monster {
name:string
FlatBuffers与protobuf性能比较
info vecotor size:37, its right size:37
占用内存空间1712Byte,平均运算时间28036ms / 3 = 9345ms 从以上数据看出,在内存空间占用这个指标上,FlatBuffers占用的内存空间比protobuf多了两倍,而二者的cpu计算时间虽然相差3000ms左右,但考虑到测试用了100万次,二者每次计算时间几乎没有差别。 从以上测试数据来看,FlatBuffers的性能并不如它吹嘘的那么好。个人稍有点失望。
总结几个有名的跨平台的序列化库
google出品,必属精品,首先推荐两个google开源的序列化库 1,Protocol Buffers 大名鼎鼎,网上关于它的介绍一搜一大推,特点如下:
二进制格式,高性能,前后兼容性,IDL方式定义协议,方便易用 2,Google FlatBuffers 貌似比较新,跟上面一个相比很像,特点是占用资源少,适合移动
平台使用 接下来一个也是非常强悍的 3, msgpack
好用,支持几乎所有主流语言
解决protobuf数据丢失bug
protobuf是Google开发的一个开源序列化框架,类似XML,JSON,其最大的特点是基于二进制,比传统的XML表示同样一段内容要短小得多。通过protobuf,可以很轻松的调用相关方法来完成业务数据的序列化与反序列化。但是,protobuf在使用当中也发现一些问题,数据在protobuf序列化后无法反序列化,或者丢失部分数据,这就与protobuf的目的违背。下面我们来看下这个问题吧。 首先定义一个protobuf结构,如下: message Person {
【c#界面和后台c++通信】跨平台数据通信的选择:Google ProtoBuf
ProtoBuf的原理
Socket通信中,客户端与服务器之间传递的是字节流。而在现实的应用中我们需要传递有一定含义的结构,使得通信的双方都能够识别该结构。实现对象(Class和Struct)Socket传输的关键就在于Class或Struct的序列和反序列化。  Protobuf是google制定的一种对象序列化格式,开源地址:ProtoBuf:链接地址 googleProtobuf的官方开源实现由java。c++和Python。而在.net下的实现有protobuf-net.(官方站点
protobuf,json,xml,binary,Thrift之间的对比
的。而protobuf这样的库正好是在效率、数据大小、易用性之间取得了很好的平衡。 protobuf简单总结如下几点: 1.灵活(方便接口更新)、高效(效率经过google的优化,传输效率比普通的XML等高很多); 2.易于使用;开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持java、c++、python等语言环境。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。 3.语言支持;原生支持c++,java
google protostuff
Google 的protobuf是一个优秀的序列化工具,跨语言、快速、序列化后体积小。 protobuf的一个缺点是需要数据结构的预编译过程,首先要编写.proto格式的配置文件,再通过protobuf提供的工具生成各种语言响应的代码。由于java具有反射和动态代码生成的能力,这个预编译过程不是必须的,可以在代码执行时来实现。有个protostuff(/p/protostuff/)已经实现了这个功能。 protostuff基于Google
protobuf和thrift对比
单一,容易学习 功能丰富、学习成本高 文档&社区 官方文档较为丰富,google搜索protocol buffer有2000W+结果,google group被墙不能访问 官方文档较少,没有API文档,google搜索apache thrift仅40W结果,邮件列表不怎么活跃 性能对比 由于thrift功能较protobuf丰富,因此单从序列化机制上进行性能比较,按照序列化后字节数、序列化时间、反序列化时间三个指标进行,对thrift的二进制、压缩、protobuf三种格式进行对比。 测试方法
最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)
盘上读取该对象数据即可,所花费时间也就读一个文件的时间,可想而知是多么的快,节省了我们的开发时间。 3. C++对象序列化的四种方法 将C++对象进行序列化的方法一般有四种,下面分别介绍: 3.1 Google Protocol Buffers(protobuf) Google Protocol Buffers (GPB)是Google内部使用的数据编码方式,旨在用来代替XML进行数据交换。可用于数据序列化与反序列化。主要特性有: 高效 语言中立(Cpp, Java, Python) 可扩展 官方
最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)
,无疑代价是非常大的。如果你确定生成数据结构的算法不会变或不常变,那么就可以通过序列化技术生成数据结构数据存储到磁盘上,下次重新运行程序时只需要从磁盘上读取该对象数据即可,所花费时间也就读一个文件的时间,可想而知是多么的快,节省了我们的开发时间。 链接地址3. C++对象序列化的四种方法 将C++对象进行序列化的方法一般有四种,下面分别介绍: 链接地址3.1 Google Protocol Buffers(protobuf) Google Protocol Buffers (GPB)是Google
详解Google-ProtoBuf中结构化数据的编码
本文的主要内容是google protobuf中序列化数据时用到的编码规则,但是,介绍具体的编码规则之前,我觉得有必要先简单介绍一下google protobuf。因此,本文首先会介绍一些google protobuf相关的内容,让读者朋友对google protobuf有一个初步的印象,然后,再开始进入正题—-深入浅出地介绍google protobuf中用到的编码规则。下面言归正传,开始今天的话题。 1. Google-ProtoBuf是什么 ProtoBuf,全称是Protocol
解Google-ProtoBuf中结构化数据的编码
本文的主要内容是google protobuf中序列化数据时用到的编码规则,但是,介绍具体的编码规则之前,我觉得有必要先简单介绍一下google protobuf。因此,本文首先会介绍一些google protobuf相关的内容,让读者朋友对google protobuf有一个初步的印象,然后,再开始进入正题—-深入浅出地介绍google protobuf中用到的编码规则。下面言归正传,开始今天的话题。 1. Google-ProtoBuf是什么 ProtoBuf,全称是Protocol
protobuf消息的自动派发
google protobuf消息序列化后的数据是没有类型信息的。而一般网络应用要求序列化后发送到对端,还原出类型,反序列化,再派发给相应的消息处理函数。 以下代码简单实现了自动派发的机制。新增protobuf消息只要增加一行声明的代码和相应的处理函数就可以了。 链接地址
#define DECLARE_MESSAGE(x) case k##x##ID: / {/ proto::/ message.ParseFromIstream(&io
[转]Google Protocol Buffers 2.4
一篇别人实践过的Protocol Buffers的东东。
转自: /2011/03/protobuf/
Google protocol buffers – a language-neutral, platform-neutral, extensible way of serializing structured data. Google的定义是:用于序列化结构化的数据的跨语言、跨平台的可扩展机制。其实就是和XML类似,不过ProtoBuf的尺寸要
& 2012 - 2016 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";

我要回帖

更多关于 unity lua protobuf 的文章

 

随机推荐