日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Google Protobuf 开发指南

發布時間:2025/3/15 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Google Protobuf 开发指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

Google Protobuf開發指南

1.簡介

l? 它是開源項目:http://code.google.com/p/protobuf/

l? google開發,并且在google內部使用

l? Protobuf的作用和xml、json是一回事,但他是二進制格式,性能好、效率高。

l? 代碼生成機制

l? 支持多種語言

l? 向后兼容、向前兼容

l? 缺點:可讀性、靈活性

2.protobuf目錄結構

下載最新的protobuf-2.5.0.zip
解壓后:

其中“editor”包含vimemacs的語法高亮配置文件,”examples”是一個例子,vsprojects文件夾是visual studio的項目文件,src中是c++的源文件。

3.使用步驟

1.?????? 編譯lib文件

2.?????? 在項目中引入includelib文件夾

3.?????? 開始使用

4.AddressBook例子

http://blog.sina.com.cn/s/blog_56dee71a01015i13.html

5.protobuf在網絡通信中應用

ProtobufTCP中使用注意事項
我的測試程序使用的TCP,于是一個很自然的問題,報文的邊界或者報文長度問題,在網上google了一圈之后發現這個確實是個問題,解決問題的方案也很直接,在報文前面加上一個字段表示整個報文的長度(包括加上的字段)。


bool?SerializeToArray(void * data, int size) const

bool?SerializeToString(string * output) const

當然還有一些其他變種,我不喜歡使用stl?string,所以選用了SerializeToArray

?

可以使用一下API反序列化:

boolParseFromArray(const void * data, int size)

boolParseFromString(const string & data)

以上寫著函數都定義在 ?google/protobuf/message_lite.h?中


不過這里有更好的解決方法:

來自陳碩的文章《一種自動反射消息類型的 Google Protobuf 網絡傳輸方案

http://www.cnblogs.com/Solstice/archive/2011/04/03/2004458.html?

6.".proto"文件語法

Proto文件

例子:

package?tutorial;message?Person?{required?string?name?=?1;required?int32?id?=?2;optional?string?email?=?3;enum?PhoneType?{MOBILE?=?0;HOME?=?1;WORK?=?2;}message?PhoneNumber?{required?string?number?=?1;optional?PhoneType?type?=?2?[default?=?HOME];}repeated?PhoneNumber?phone?=?4; }message?AddressBook?{repeated?Person?person?=?1; }


1.??????? 字段類型:bool,int32,float,double,string

2.??????? 支持消息嵌套

3.??????? 支持enum

索引號要按順序指定

字段前綴:

required:必須的

optional:可選的

repeated:可以重復的

?

protoc使用

protoc?-I=$SRC_DIR?--cpp_out=$DST_DIR?$SRC_DIR/addressbook.proto

代碼使用說明:

在程序開頭添加:

//?Verify?that?the?version?of?the?library?that?we?linked?against?is??? //?compatible?with?the?version?of?the?headers?we?compiled?against.??? GOOGLE_PROTOBUF_VERIFY_VERSION;

在程序結尾添加:

//?Optional:??Delete?all?global?objects?allocated?by?libprotobuf.??? google::protobuf::ShutdownProtobufLibrary();

?

代碼風格指導

https://developers.google.com/protocol-buffers/docs/style

1.?????? 消息和字段名:大寫字母開頭的駝峰表示法表示消息名稱,如:SongServerRequest。使用小寫字母+下劃線分隔表示字段名,如:song_name。

message?SongServerRequest?{required?string?song_name?=?1; }

2.?????? 枚舉類型:大寫字母開頭的駝峰表示法表示枚舉名稱,使用大寫字母+下劃線表示值

enum?Foo?{FIRST_VALUE?=?1;SECOND_VALUE?=?2; }


:每個值末尾使用分號而不是逗號

?

轉載于:https://my.oschina.net/macwe/blog/157862

總結

以上是生活随笔為你收集整理的Google Protobuf 开发指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。