青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

網絡服務器軟件開發/中間件開發,關注ACE/ICE/boost

C++博客 首頁 新隨筆 聯系 聚合 管理
  152 Posts :: 3 Stories :: 172 Comments :: 0 Trackbacks

 在進行 <<協議設計>>系列之前,先寫點零碎的知識,做些鋪墊.

 Google的libprotobuf,已經很強大了,開始接觸的時候還是2.1版本,現在已經到了2.2了,新版最大的變化就是添加了libprotobuf-lite!,是libprotobuf的精簡版,更加的輕量級,非常適合我的口味。
 我比較推崇這個數據交換引擎,平時也在自己的代碼里面有過應用,比如做簡單的IM,文件傳輸等,都極為方便,看重的幾點好處如下(手冊中描述的好處就省了):
       1.提供接口描述語言(IDL),無論是做客戶端,還是做服務端,都在面向接口編程。而且IDL語法規則很簡單,和C的結構體語法類似。
       2.自動生成序列化及反序列化代碼,讓開發人員脫離了協議的細節,把更多的精力放到業務邏輯的編寫上

聽起來不錯,事實上也真不錯,不過還有幾個問題需要考慮:
    1.你的客戶端能帶上libprotobuf這個包嗎?
    2.你的客戶端如果只支持C語言,怎么辦?比如手機客戶端
    3.要讀懂libprotobuf的編碼原理,除了要有一定水平,還需要時間,其它項目成員能夠接受嗎?

     我身邊有朋友就碰到一種情況:一個手游項目,客戶端是C的,服務端c++的,而且客戶端和服務端是異地開發,如果從頭做起,需要先協商好每個消息的結構,開發時這里不可避免的要涉及消息的序列化及反序列化,如果挨個消息手動解析,工作量會很大,而且調試困難,容易出錯,可見一個像libprotobuf這樣提供IDL的工具是很有必要的。
    下面說一下,目前我的思路:
         1.libprotobuf是肯定不能用了
         2.為了便于雙方理解,要更多的采用常規協議設計方法
         3.一個小巧的IDL還是需要的,只需要自動完成序列化和反序列化即可
    舉個具體例子,假若有下面一個C的結構體:
       struct SLogin
        {
            uint32 nId_;//用戶ID
            string sPwd_;//密碼
            uint8  nStatus_;//登陸狀態
        };
    這里為了說明方便,使用了std::string,可以用char數組代替,或者用<ptr,len>形式代替。那么編碼的時候,常規方式就是uint32占用4個字節,uint8占用1個字節,都容易理解,這里不要用libprotobuf的varint。
    重點看一下string的編碼方式,其中string可以是ASCII字符串,也可以是二進制的數據塊。任何協議都遵循TLV結構,其中T為Type類型,L為Length長度,V為Value值,前面的uint32不用額外的TL是因為:(1)他是結構體的第一個成員,而第一個成員雙方約定是整形,確定了T,(2)uint32本身說明了長度為4個字節。同樣,由于雙方約定第二個結構體成員是string類型,所以只需要確定長度即可。那么長度字段本身是固定長度,還是變長的呢?如果長度固定,最少需要2個字節,該情況下,對于很短的字符串也是2個字節的長度,有些浪費。所以最好采取變長的長度,varint,每個字節的低7位是有效承載,最高位表示后面是否還有高字節出現。
    另外,針對上面這樣簡單結構體,最好用python腳本寫個小代碼生成工具,自動生成序列化及反序列化的代碼,應該不難。
    關于序列化,可以參考文本協議json做下對比,http://www.json.org/


posted on 2009-09-24 03:03 true 閱讀(4653) 評論(1)  編輯 收藏 引用 所屬分類: C++基礎編碼知識

Feedback

# re: C++結構體序列化的一點思考 2009-09-24 12:17 陳梓瀚(vczh)
以前嘗試做過一個,標記了你需要的所有類,它們的父類,他們的成員和函數之后,就算給一個base指針,也能判斷出是什么子類,然后正確序列化。當然這個一點都不輕量級,很重。  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            激情成人在线视频| 亚洲欧美一区二区激情| 亚洲综合清纯丝袜自拍| 99www免费人成精品| 一区二区三区高清| 亚洲免费视频在线观看| 欧美一区二区三区另类| 欧美在线三级| 六月婷婷一区| 亚洲高清在线精品| 91久久久亚洲精品| 亚洲视频 欧洲视频| 欧美影视一区| 欧美成人免费视频| 国产精品国产三级国产aⅴ9色| 国产精品任我爽爆在线播放| 国产麻豆一精品一av一免费| 伊人天天综合| 一区二区三区视频在线看| 欧美一级视频| 亚洲国产日韩欧美在线图片| 亚洲欧美日本日韩| 麻豆精品在线视频| 国产精品人成在线观看免费| 亚洲国产免费看| 先锋资源久久| 亚洲激情影视| 久久国产精品第一页| 欧美日韩专区在线| 亚洲大片一区二区三区| 亚洲在线免费| 亚洲欧洲日韩综合二区| 欧美影片第一页| 国产精品久在线观看| 亚洲人体偷拍| 毛片av中文字幕一区二区| 99精品视频一区| 欧美a级理论片| 国产午夜精品全部视频播放| 亚洲乱码日产精品bd| 美女亚洲精品| 午夜视频一区二区| 国产精品乱码久久久久久| 99re成人精品视频| 亚洲高清不卡在线观看| 久久久久久九九九九| 国产精品综合不卡av| 亚洲少妇中出一区| 亚洲看片网站| 欧美精品在线观看播放| 亚洲区免费影片| 欧美高清不卡在线| 久久综合网络一区二区| 精品动漫3d一区二区三区| 亚洲一区二区影院| 久久在精品线影院精品国产| 一道本一区二区| 欧美日本高清| 99在线精品视频在线观看| 亚洲高清电影| 欧美成人午夜| 日韩午夜免费| 夜夜嗨一区二区三区| 欧美日韩一区二区三| 一本一本a久久| 亚洲精品一区二区三区四区高清 | 久久综合一区二区| 亚洲欧美激情四射在线日| 国产精品久久久久久久久久妞妞| 一本久久a久久精品亚洲| 99国产成+人+综合+亚洲欧美| 欧美黑人一区二区三区| 日韩视频永久免费观看| 亚洲美女在线观看| 欧美午夜精品久久久久免费视| 亚洲在线观看视频| 午夜视频一区二区| 在线观看亚洲一区| 亚洲人被黑人高潮完整版| 欧美日韩精品中文字幕| 亚洲综合色激情五月| 新狼窝色av性久久久久久| 在线观看日韩av先锋影音电影院| 亚洲国产成人不卡| 国产精品久久久久久久午夜| 久久精品人人做人人综合| 久久精品99国产精品日本| 亚洲精品视频在线| 亚洲一区二区三区视频| 激情一区二区| 亚洲精品一区久久久久久| 国产欧美日韩三级| 亚洲国产精品ⅴa在线观看| 国产精品高精视频免费| 久久美女艺术照精彩视频福利播放| 免费一区二区三区| 欧美在线短视频| 欧美国产欧美亚州国产日韩mv天天看完整| 一本色道久久综合亚洲精品不卡| 亚洲欧美资源在线| 亚洲美女视频| 欧美专区亚洲专区| 亚洲午夜av在线| 久久一区二区视频| 午夜精品美女久久久久av福利| 久久久亚洲国产美女国产盗摄| 日韩一级裸体免费视频| 久久av一区二区三区| 中文精品视频| 久久蜜桃精品| 欧美中文日韩| 欧美视频在线一区二区三区| 先锋影音网一区二区| 亚洲一区黄色| 久久婷婷激情| 欧美一区二区三区视频在线| 欧美精品电影| 欧美超级免费视 在线| 国产精品日日摸夜夜摸av| 亚洲人精品午夜| 亚洲成色www8888| 午夜精品视频一区| 亚洲欧洲av一区二区三区久久| 欧美激情按摩在线| 欧美激情在线播放| 黑人一区二区| 久久国产精品久久w女人spa| 亚洲免费网址| 欧美三级视频在线| 亚洲精品在线免费观看视频| 亚洲经典在线看| 久久精品亚洲精品国产欧美kt∨| 欧美一区二区精品在线| 国产精品―色哟哟| 亚洲天堂av图片| 亚洲欧美色一区| 国产精品羞羞答答xxdd| 亚洲婷婷在线| 欧美一区二区三区久久精品茉莉花 | 亚洲一区三区视频在线观看| 欧美片在线观看| 亚洲国产成人久久综合一区| 91久久精品日日躁夜夜躁欧美| 麻豆国产va免费精品高清在线| 可以免费看不卡的av网站| 曰韩精品一区二区| 美女成人午夜| 欧美激情视频一区二区三区在线播放 | 亚洲一区三区视频在线观看| 欧美午夜性色大片在线观看| 一区二区三区不卡视频在线观看 | 久久午夜精品一区二区| 欧美成人在线免费视频| 亚洲国产高清自拍| 欧美福利在线| 一区二区国产日产| 欧美一区二区啪啪| 在线观看一区欧美| 欧美日韩一区二区三区在线看| 亚洲私拍自拍| 久久免费视频观看| 99精品欧美一区二区三区综合在线| 欧美日韩你懂的| 性欧美大战久久久久久久久| 欧美+亚洲+精品+三区| 亚洲精品一区在线观看| 国产精品久久久一区二区三区| 久久精品国产2020观看福利| 亚洲国产日韩在线| 欧美亚洲一区在线| 亚洲破处大片| 欧美日韩精品一区二区在线播放| 麻豆精品在线视频| 亚洲日本成人网| 国产精品电影观看| 一区二区三区视频在线| 欧美专区福利在线| 亚洲第一精品久久忘忧草社区| 免费在线观看成人av| 中日韩美女免费视频网址在线观看 | 欧美日韩一区二区三区在线 | 久久久精品性| 日韩视频在线一区二区| 久久久久国产精品www| 亚洲小说区图片区| 亚洲人成免费| 在线观看精品视频| 欧美日韩中文字幕在线视频| 可以看av的网站久久看| 亚洲一区二区三区乱码aⅴ| 亚洲黄色小视频| 美国三级日本三级久久99| 亚洲一区在线看| 亚洲免费观看高清在线观看| 韩国欧美国产1区| 国产精品欧美久久| 欧美伦理一区二区| 老司机精品视频网站| 久久精品国产欧美亚洲人人爽| 亚洲一区二区三区四区五区午夜 |