随笔-348  评论-598  文章-0  trackbacks-0
Google Protocol Buffers是google出品的一个协议生成工具,特点就是跨平台,效率高,速度快,对我们自己的程序定义和使用私有协议很有帮助。

Protocol Buffers入门:
1、去 http://code.google.com/p/protobuf/downloads/list 下载一个源代码包和一个已编译好的二进制包
2、找一个Proto示例代码,使用命令
protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
将proto文件编译一下即可得到对应的Java源代码。例如 protoc -I=src --java_out=addressbook.proto。

Java项目配置:
1、先用
     $ protoc --java_out=src/main/java -I../src ../src/google/protobuf/descriptor.proto
     命令把源代码包中的descriptor.proto编译一下,生成一个类。
2、将第一步生成的那个文件连同源代码包中的java/src/main/java中的源代码,一起丢入你的项目工程,这就是基础类库了。
3、之后你就可以写自己的proto文件,然后编译,连同上面的基础类库丢入你的项目工程中,就可以运行了。

C#的配置:
1、Google本身不自带生成C#源码的功能,要使用C#,必须使用一个Csharp port,项目地址是:http://code.google.com/p/protobuf-csharp-port/
2、源码可以从SVN上面Download下来,Download下来之后,需要去下载一个NAnt,然后在项目源码目录下进行命令操作,用来编译生成可执行文件
nant clean build test dist
这步做完会生成几个文件:

  • ProtoGen.exe - the source code generator
  • Google.ProtocolBuffers.dll - the library part of the project
  • ProtoMunge.exe - tool to remove sensitive data from binary messages
  • ProtoDump.exe - tool to dump a binary message as text
  • ProtoBench.exe - tool to run performance benchmarks on binary messages

  • 主要是第一个和第二个
    第一个ProtoGen.exe是用来生成C#源码的
    第二个Google.ProtocolBuffers.dll是用来在项目中进行引用的。

    3、在源码中附带了记个proto文件,是根据C#版本专门修改过的,可以拿出来做生成测试,执行以下命令可以得到C#源文件:
    protoc --descriptor_set_out=addressbook.protobin --proto_path=protos --include_imports protos\tutorial\addressbook.proto 
     
    protogen addressbook.protobin
    如果想生成C#源码,需要执行第一步将源文件用Protoc编译一下,编译之后再用Protogen生成一份C#文件,会生成三个文件,只有AddressBookProtos.cs有用,将这个文件连同Google.ProtocolBuffers.dll一起丢入项目,你就可以使用了。

    ---------------------------------------------------------
    专注移动开发

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2009-08-21 13:45 TiGERTiAN 阅读(11318) 评论(12)  编辑  收藏 所属分类: JavaDotNetAndroid

    评论:
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2009-12-01 15:55 | YYXZ

    您好,有个问题请教,就是有个项目采用“java 手机客户端、C++服务器”,C++服务器的协议是用结构体定义的,java客户端解析起来很不方便。
    请问能否用Google Protocol Buffers呢,这样就不用人工解析消息格式了,望指教。

    我的联系方式:qq:358953076  回复  更多评论
      
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2009-12-01 16:00 | TiGERTiAN
    @YYXZ
    你可以看下,我记得好像c++是生成类文件,只要稍作修改就可以使用了,如果客户端测试方便,那稍微修改下也很好。或者你就自定义协议来传输  回复  更多评论
      
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2009-12-01 16:14 | YYXZ
    @TiGERTiAN
    “自定义协议”怎么讲?  回复  更多评论
      
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2009-12-01 16:18 | TiGERTiAN
    @YYXZ
    你可以用json,xml等等来拼凑自己的协议,然后上客户端去解析  回复  更多评论
      
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2009-12-01 16:24 | YYXZ
    @TiGERTiAN
    哦,谢谢您的解答。
    另外一个问题,使用Google Protocol Buffers生成的协议,比用C++定义的结构体消息是不是更小些,传输起来是不是更节省带宽呢,因为客户端是手机,越节省越好了。  回复  更多评论
      
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2009-12-01 16:27 | TiGERTiAN
    @YYXZ
    你是什么意思?你c++用结构体的话传输到客户端肯定要有自己协议的,google生成的东西里面会加一些他自己的格式在里面,但是加的很少。google的协议大小不一定比你自定义的小很多,但是解析起来肯定比你的快和方便。因为他是从二进制直接转换成对象,中间的处理已经尽量做到高效了。  回复  更多评论
      
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2009-12-01 16:36 | YYXZ
    @TiGERTiAN
    是这样的,目前C++服务器用结构体定义的协议,发送到java手机客户端,需要自己解析,还得考虑内存对齐问题,效率太低了。考虑采用Protocol Buffers,这样会提高效率吧   回复  更多评论
      
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2009-12-01 16:41 | TiGERTiAN
    @YYXZ
    实在不行就用xml也可以,不需要考虑这些,直接线性解析xml文本,效率跟速度都不会慢,只是需要修改架构了。用buffers也要重新写协议,做之前,最好在j2me上面重新测试下buffers的性能和可用性。  回复  更多评论
      
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2009-12-01 16:48 | YYXZ
    @TiGERTiAN
    嗯,好的,再次谢谢您的解答。  回复  更多评论
      
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2009-12-01 16:49 | TiGERTiAN
    @YYXZ
    不客气,互相帮助哈。  回复  更多评论
      
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2010-09-09 11:10 | lishen
    我觉得有两种方式:1、用Protocol Buffers,就是不知道生成的JAVA代码在j2me下能不能运行。 2、用JSON做消息格式,然后压缩传输。客户端收到再解压。这个需要自己实现消息头,然后在解析消息体,稍微麻烦些,不过消息解析可以用现成的库(因为Java有现成的解析JSON的库)。而且由于压缩的缘故,流量可以很小,如果可能要比用Protocal BUffers复杂。 你用结构体的意思应该是把内存块直接传给JAVA客户端了,JAVA对于二进制操作远没有C++方便,而且结构体中有很多内存区域并没有数据,拜拜浪费流量。而且如果要传递就够提就必须保证结构体内存连续,这样结构体中就不能使用复杂的数据结构,多不爽啊。还是用JSON或PB好。  回复  更多评论
      
    # re: Google Protocol Buffers 快速入门(带生成C#源码的方法) 2012-05-08 17:08 | 游客1
    c# 配置的时候,你这些命令都是在什么地方输入的啊。  回复  更多评论
      

    只有注册用户登录后才能发表评论。


    网站导航: