隨筆-348  評(píng)論-598  文章-0  trackbacks-0
          Google Protocol Buffers是google出品的一個(gè)協(xié)議生成工具,特點(diǎn)就是跨平臺(tái),效率高,速度快,對(duì)我們自己的程序定義和使用私有協(xié)議很有幫助。

          Protocol Buffers入門(mén):
          1、去 http://code.google.com/p/protobuf/downloads/list 下載一個(gè)源代碼包和一個(gè)已編譯好的二進(jìn)制包
          2、找一個(gè)Proto示例代碼,使用命令
          protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
          將proto文件編譯一下即可得到對(duì)應(yīng)的Java源代碼。例如 protoc -I=src --java_out=addressbook.proto。

          Java項(xiàng)目配置:
          1、先用
               $ protoc --java_out=src/main/java -I../src ../src/google/protobuf/descriptor.proto
               命令把源代碼包中的descriptor.proto編譯一下,生成一個(gè)類(lèi)。
          2、將第一步生成的那個(gè)文件連同源代碼包中的java/src/main/java中的源代碼,一起丟入你的項(xiàng)目工程,這就是基礎(chǔ)類(lèi)庫(kù)了。
          3、之后你就可以寫(xiě)自己的proto文件,然后編譯,連同上面的基礎(chǔ)類(lèi)庫(kù)丟入你的項(xiàng)目工程中,就可以運(yùn)行了。

          C#的配置:
          1、Google本身不自帶生成C#源碼的功能,要使用C#,必須使用一個(gè)Csharp port,項(xiàng)目地址是:http://code.google.com/p/protobuf-csharp-port/
          2、源碼可以從SVN上面Download下來(lái),Download下來(lái)之后,需要去下載一個(gè)NAnt,然后在項(xiàng)目源碼目錄下進(jìn)行命令操作,用來(lái)編譯生成可執(zhí)行文件
          nant clean build test dist
          這步做完會(huì)生成幾個(gè)文件:

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

        6. 主要是第一個(gè)和第二個(gè)
          第一個(gè)ProtoGen.exe是用來(lái)生成C#源碼的
          第二個(gè)Google.ProtocolBuffers.dll是用來(lái)在項(xiàng)目中進(jìn)行引用的。

          3、在源碼中附帶了記個(gè)proto文件,是根據(jù)C#版本專(zhuān)門(mén)修改過(guò)的,可以拿出來(lái)做生成測(cè)試,執(zhí)行以下命令可以得到C#源文件:
          protoc --descriptor_set_out=addressbook.protobin --proto_path=protos --include_imports protos\tutorial\addressbook.proto 
           
          protogen addressbook.protobin
          如果想生成C#源碼,需要執(zhí)行第一步將源文件用Protoc編譯一下,編譯之后再用Protogen生成一份C#文件,會(huì)生成三個(gè)文件,只有AddressBookProtos.cs有用,將這個(gè)文件連同Google.ProtocolBuffers.dll一起丟入項(xiàng)目,你就可以使用了。

          ---------------------------------------------------------
          專(zhuān)注移動(dòng)開(kāi)發(fā)

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2009-08-21 13:45 TiGERTiAN 閱讀(11338) 評(píng)論(12)  編輯  收藏 所屬分類(lèi): JavaDotNetAndroid

          評(píng)論:
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2009-12-01 15:55 | YYXZ

          您好,有個(gè)問(wèn)題請(qǐng)教,就是有個(gè)項(xiàng)目采用“java 手機(jī)客戶(hù)端、C++服務(wù)器”,C++服務(wù)器的協(xié)議是用結(jié)構(gòu)體定義的,java客戶(hù)端解析起來(lái)很不方便。
          請(qǐng)問(wèn)能否用Google Protocol Buffers呢,這樣就不用人工解析消息格式了,望指教。

          我的聯(lián)系方式:qq:358953076  回復(fù)  更多評(píng)論
            
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2009-12-01 16:00 | TiGERTiAN
          @YYXZ
          你可以看下,我記得好像c++是生成類(lèi)文件,只要稍作修改就可以使用了,如果客戶(hù)端測(cè)試方便,那稍微修改下也很好。或者你就自定義協(xié)議來(lái)傳輸  回復(fù)  更多評(píng)論
            
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2009-12-01 16:14 | YYXZ
          @TiGERTiAN
          “自定義協(xié)議”怎么講?  回復(fù)  更多評(píng)論
            
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2009-12-01 16:18 | TiGERTiAN
          @YYXZ
          你可以用json,xml等等來(lái)拼湊自己的協(xié)議,然后上客戶(hù)端去解析  回復(fù)  更多評(píng)論
            
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2009-12-01 16:24 | YYXZ
          @TiGERTiAN
          哦,謝謝您的解答。
          另外一個(gè)問(wèn)題,使用Google Protocol Buffers生成的協(xié)議,比用C++定義的結(jié)構(gòu)體消息是不是更小些,傳輸起來(lái)是不是更節(jié)省帶寬呢,因?yàn)榭蛻?hù)端是手機(jī),越節(jié)省越好了。  回復(fù)  更多評(píng)論
            
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2009-12-01 16:27 | TiGERTiAN
          @YYXZ
          你是什么意思?你c++用結(jié)構(gòu)體的話傳輸?shù)娇蛻?hù)端肯定要有自己協(xié)議的,google生成的東西里面會(huì)加一些他自己的格式在里面,但是加的很少。google的協(xié)議大小不一定比你自定義的小很多,但是解析起來(lái)肯定比你的快和方便。因?yàn)樗菑亩M(jìn)制直接轉(zhuǎn)換成對(duì)象,中間的處理已經(jīng)盡量做到高效了。  回復(fù)  更多評(píng)論
            
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2009-12-01 16:36 | YYXZ
          @TiGERTiAN
          是這樣的,目前C++服務(wù)器用結(jié)構(gòu)體定義的協(xié)議,發(fā)送到j(luò)ava手機(jī)客戶(hù)端,需要自己解析,還得考慮內(nèi)存對(duì)齊問(wèn)題,效率太低了。考慮采用Protocol Buffers,這樣會(huì)提高效率吧   回復(fù)  更多評(píng)論
            
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2009-12-01 16:41 | TiGERTiAN
          @YYXZ
          實(shí)在不行就用xml也可以,不需要考慮這些,直接線性解析xml文本,效率跟速度都不會(huì)慢,只是需要修改架構(gòu)了。用buffers也要重新寫(xiě)協(xié)議,做之前,最好在j2me上面重新測(cè)試下buffers的性能和可用性。  回復(fù)  更多評(píng)論
            
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2009-12-01 16:48 | YYXZ
          @TiGERTiAN
          嗯,好的,再次謝謝您的解答。  回復(fù)  更多評(píng)論
            
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2009-12-01 16:49 | TiGERTiAN
          @YYXZ
          不客氣,互相幫助哈。  回復(fù)  更多評(píng)論
            
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2010-09-09 11:10 | lishen
          我覺(jué)得有兩種方式:1、用Protocol Buffers,就是不知道生成的JAVA代碼在j2me下能不能運(yùn)行。 2、用JSON做消息格式,然后壓縮傳輸。客戶(hù)端收到再解壓。這個(gè)需要自己實(shí)現(xiàn)消息頭,然后在解析消息體,稍微麻煩些,不過(guò)消息解析可以用現(xiàn)成的庫(kù)(因?yàn)镴ava有現(xiàn)成的解析JSON的庫(kù))。而且由于壓縮的緣故,流量可以很小,如果可能要比用Protocal BUffers復(fù)雜。 你用結(jié)構(gòu)體的意思應(yīng)該是把內(nèi)存塊直接傳給JAVA客戶(hù)端了,JAVA對(duì)于二進(jìn)制操作遠(yuǎn)沒(méi)有C++方便,而且結(jié)構(gòu)體中有很多內(nèi)存區(qū)域并沒(méi)有數(shù)據(jù),拜拜浪費(fèi)流量。而且如果要傳遞就夠提就必須保證結(jié)構(gòu)體內(nèi)存連續(xù),這樣結(jié)構(gòu)體中就不能使用復(fù)雜的數(shù)據(jù)結(jié)構(gòu),多不爽啊。還是用JSON或PB好。  回復(fù)  更多評(píng)論
            
          # re: Google Protocol Buffers 快速入門(mén)(帶生成C#源碼的方法) 2012-05-08 17:08 | 游客1
          c# 配置的時(shí)候,你這些命令都是在什么地方輸入的啊。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 延安市| 策勒县| 民丰县| 得荣县| 顺义区| 东阿县| 鄄城县| 理塘县| 吉安市| 萍乡市| 南宫市| 稻城县| 修文县| 金阳县| 贵州省| 兴安县| 遵化市| 汾阳市| 顺平县| 贞丰县| 上虞市| 讷河市| 景泰县| 白银市| 怀化市| 龙井市| 治多县| 绥阳县| 连山| 丹棱县| 河间市| 乐业县| 礼泉县| 磐安县| 鱼台县| 沙坪坝区| 嘉义市| 鲜城| 武川县| 红桥区| 盘山县|