【转】【UNITY3D 游戏开发之五】Google

  • 时间:
  • 浏览:3
  • 来源:uu快3手机版_uu快3走势图_网游

Order order;

order.set_time(XXXX);

order.set_userid(123);

order.set_price(400.0f);

order.set_desc(“a test order”);

◇支持“向后兼容”和“向前兼容”

还是拿刚才的例子来说事儿。为了叙述方便,俺把增加了“情况”属性的订单协议成为“新版本”;刚刚的叫“老版本”。

所谓的“向后兼容”(backward compatible),要是说,当模块B升级了刚刚,它不不 正确识别模块A发出的老版本的协议。不可能 老版本非要 “情况”要是 属性,在扩充协议时,都不不 考虑把“情况”属性设置成非必填 的,不可能 给“情况”属性设置有有有4个缺省值(如可设置缺省值,参见“这里 ”)。

所谓的“向前兼容”(forward compatible),要是说,当模块A升级了刚刚,模块B不不 正常识别模块A发出的新版本的协议。这刚刚,新增加的“情况”属性会被忽略。

“向后兼容”和“向前兼容”有啥用捏?俺举个例子:当你维护有有有4个很庞大的分布式系统时,不可能 你无法一起 升级所有 模块,为了保证在升级过程中,整个系统不不 尽不可能 不受影响,就需用尽量保证通讯协议的“向后兼容”或“向前兼容”。

Order order;

if(order.ParseFromString(sOrder))  // 解析该字符串

{

cout << “userid:” << order.userid() << endl

<< “desc:” << order.desc() << endl;

}

else

{

cerr << “parse error!” << endl;

}

为那先 俺会用上protobuf?

俺自另有有4个段时间接触了protobuf刚刚,就着手把俺负责的产品中的累积数据传输协议替加带protobuf。不可能 有同学会问,和protobuf之类的东东都不 不少,缘何独独相中protobuf捏?不可能 今天写的篇幅不可能 蛮长了,俺卖个关子,把要是 话题留到“生产者/消费者模式[5]:如可选择传输协议及格式?”。俺会在后续的要是 帖子里对比各种五花八门的协议格式,并谈谈俺的浅见。

// 发送方

本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/16390400,如需转载请自行联系原作者

◇性能好/速度高

现在,俺就来搞笑的话Google公司缘何放着好端端的XML不不,非要另起炉灶,重新造轮子。有有有4个根本的原因是XML性能严重不足好。

先说时间开销:XML格式化(序列化)的开销倒还好;很久XML解析(反序列化)的开销就不敢恭维啦。俺刚刚无缘无故碰到要是时间性能很敏感的场合,不可能 不堪忍受XML解析的速度,弃之如敝履。

再来看空间开销:熟悉XML语法的同学应该知道,XML格式为了有较好的可读性,引入了要是冗余的文本信息。要是空间开销也都不 太好(不过这点缺点,俺不常碰到)。

不可能 Google公司赖以吹嘘的要是它的海量数据和海量除理能力。对于几十万、上百万机器的集群,动不动要是PB级的数据量,哪怕性能稍微提高 0.1% 也是相当可观滴。要是Google自然无法容忍XML在性能上的明显缺点。加带带Google从来就不缺造轮子的牛人,要是protobuf也就应运而生了。

Google对于性能的偏执,那另有有4个出了名的。要是,俺对于Google搞出来protobuf是非常滴放心,性能上不敢说是最好,但肯定不不太差。

// 接收方

◇支持多种编程语言

俺开博以来点评 的有好多个开源项目(比如“Sqlite ”、“cURL ”),都不 支持要是种 编程语言滴,这次的protobuf要是例外。在Google官方发布的源代码中所含了C++、Java 、Python这名语言(正好也是俺最常用的这名,真爽)。不可能 你平时用的要是这这名语言之一,那就好办了。

很久我我你想把protobuf用于其它语言,怎办捏?不可能 Google一呼百应的号召力,开源社区对protobuf响应踊跃,近期出现要是其它编程语言的版本(比如ActionScript、C#、Lisp、Erlang、Perl、PHP 、Ruby等),要是语言还一起搞出了多个开源的项目。具体细节都不不 参见“这里 ”。

不过俺有义务提醒一下在座的各位同学。不可能 你考虑把protobuf用于上述那先 语言,一定认真评估对应的开源库。不可能 那先 开源库都不 Google官方提供的、很久出来的时间还不长。要是,它们的质量、性能等方面不可能 还有严重不足。

3. lua下使用protobuf   http://www.thinksaas.cn/group/topic/276365/

message Order

{

required int32 time = 1;

required int32 userid = 2;

required float price = 3;

optional string desc = 4;

}

1.GoogleProtoBuf开发者指南  http://wenku.baidu.com/link?url=IlqKZ0Uc-NVs1KmGlQBw6IoRf6UTIln8QBEhtZ-5qWwAm6xcGYF3z6nMzaIDb-wA9R2ULnqh4XbXpFGXx6rqdKb41h8B_hxGWe0vYlp9-0W

--------------------------------

有了要是 代码生成机制,开发人员再要是用吭哧吭哧地编写那先 协议解析的代码了(干要是 活是典型的吃力不讨好)。

万一将来需求位于变更,要求给订单再增加有有有4个“情况”的属性,那只需用在Order.proto文件中增加一行代码。对于发送方(模块A),很久我增加一行设置情况的代码;对于接收方(模块B)很久我增加一行读取情况的代码。哇塞,果真太轻松了!

另外,不可能 通讯双方使用不同的编程语言来实现,使用要是 机制要是是否是效确保两边的模块对于协议的除理是一致的。

顺便跑题一下。

从这名意义上讲,都不不 把proto文件看成是描述通讯协议的规格说明书(不可能 叫接口规范)。要是 伎俩我我觉得老早都不 了,搞过微软的COM编程不可能 接触过CORBA的同学,应该都能从中看得人IDL(完正解释看“这里 ”)的影子。它们的思想是相通滴。

--------------------------------

--------------------------------

4. android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】   http://www.cnblogs.com/TerryBlog/archive/2011/04/23/2025654.html

 关于Protobuf 通过本文的转载和分享的相关链接,足够了解使用了,要是这里不赘述了。很久这里Himi顺便提一下“FlatBuffers” ,它是 Protocol Buffers升级版,其主要区别在于FlatBuffers在访问数据前不需用解析/拆包要是 步。

string sOrder;

order.SerailzeToString(&sOrder);

2.   .protobuf文件转成.cs文件方法      http://www.cnblogs.com/pctzhang/archive/2012/08/400/26634004.html

protobuf是啥玩意儿?

为了照顾从没听说过的同学,照例先来扫盲一把。

首先,protobuf是有有有4个开源 项目(官方站点在“这里 ”),很久是后台硬硬的开源项目。网上现有的大累积(大慨400%)开源项目,要么是某人单干、要么是有好多个闲杂人等合伙搞。而protobuf则不然,它是鼎鼎大名的Google公司开发出来,很久在Google内控 久经考验的有有有4个东东。由此可见,它的作者绝非一般闲杂人等可比。

那要是 听起来牛X的东东到底有啥用处捏?简单地说,要是 东东干的事儿我我觉得和XML 差太少,也要是把这名数据特性的信息,以这名格式保存起来。主要用于数据存储、传输协议格式等场合。有同学不可能 心理犯嘀咕了:放着好好的XML不不,干嘛重新发明权轮子啊?!先别急,上面俺自然会有说道。

话说到了去年(大慨是08年7月),Google无缘无故大发慈悲,把要是 好东西贡献给了开源社区。这下,像俺要是 喜欢捡现成的家伙可都不 福啦!貌似喜欢捡现成的家伙还蛮多滴,加带带 Google的号召力,开源后非要一年,protobuf的人气就不可能 很旺了。要是俺为了与时俱进,就单独开个帖子来忽悠一把。

          最后再多说一句,从同事(刚刚腾讯的)那里了解到,腾讯都不 一套之类的框架 TSF4G,很牛x,听说FlatBuffers 要是 要是参考的TSF4G做的。当然这里也放出参考链接,有兴趣的也都不不 去了解下:http://djt.qq.com/article/view/298     http://zqted.com/qq-mmog-share-learn.html

【以下内容,均为转载】

protobuf有啥特色?

扫盲完了刚刚,就该聊一下技术 方面搞笑的话题了。不可能 这玩意儿发布的时间较短(未满周岁),要是俺接触的时间要是长。今天在此是先学现卖,列位看官多多包涵 :-)

protobuf有啥严重不足?

前几天刚刚在“光环效应 ”的帖子里强调了“要一起评估优点和缺点”。要是俺最后再来批判一下这玩意儿的缺点。

◇应用 严重不足广

不可能 protobuf刚回应 没多久,相比XML而言,protobuf还属于初出茅庐。很久,在知名度、应用广度等方面都远不如XML。不可能 要是 原因,很久我我你设计的系统需用提供若干对外的接口给第三方系统调用,俺奉劝你暂时好的反义词考虑protobuf格式。

◇二进制格式原因可读性差

为了提高性能,protobuf采用了二进制格式进行编码。这直接原因了可读性差的问题图片图片(严格地说,是非要 可读性)。我我觉得protobuf提供了TextFormat要是 工具类(文档在“这里 ”),但终究无法彻底除理此问题图片图片。

可读性差的危害,俺再来举个例子。比如通讯双方不可能 出现问题图片图片,极易原因扯皮(都不 承认此人 有问题图片图片,都说是对方的错)。俺对付扯皮的有有有4个简单方法 要是直接抓包并dump成log,能比较容易地看出错误在哪一方。很久protobuf的二进制格式,原因你抓包并直接dump出来的log难以看懂。

◇严重不足自描述

一般来说,XML是自描述的,而protobuf格式则都不 。我想要一段二进制格式的协议内容,不可能 不配合相应的proto文件,那果真就像天书一般。

不可能 “严重不足自描述”,加带带“二进制格式原因可读性差”。要是在配置文件方面,protobuf是肯定无法取代XML的地位滴。

string sOrder;

// 先通过网络通讯库接收到数据,存装入某字符串sOrder

// ……

5. protobuf 小示例 http://www.cnblogs.com/sifenkesi/p/4045392.html

// 很久调用这名socket的通讯库把序列化刚刚的字符串发送出去

// ……

           这里分享有有有4个FlatBuffers 的链接,童鞋们也都不不 去了解下 http://itindex.net/detail/400777-google-flatbuffers-%E5%BC%400%E6%BA%90 .

--------------------------------

很久,使用protobuf内置的编译器编译 该proto。不可能 本例子的模块是C++,我想要通过protobuf编译器的命令行参数(看“这里 ”),让它生成C++语言的“订单包装类”。(一般来说,有有有4个message特性会生成有有有4个包装类)

就我想要使用之类下面的代码来序列化/解析该订单包装类:

--------------------------------

◇代码 生成机制

除了性能好,代码生成机制是主要吸引俺的地方。为了说明要是 代码生成机制,俺举个例子。

比如有个电子商务的系统(假设用C++实现),其中的模块A需用发送一定量的订单信息给模块B,通讯的方法 使用socket。

假设订单包括如下属性:

--------------------------------

时间:time(用整数表示)

客户id:userid(用整数表示)

交易金额:price(用浮点数表示)

交易的描述:desc(用字符串表示)

--------------------------------

不可能 使用protobuf实现,首太难写有有有4个proto文件(不妨叫Order.proto),在该文件中加所含晒 晒 4个名为”Order”的message特性,用来描述通讯协议中的特性化数据。该文件的内容大致如下: