国产精品尤物福利片在线观看_少妇免费毛片久久久久久久久_久久久久成人精品免费播放动漫_日韩av综合在线观看

歡迎來到010在線作文網(wǎng)!

Protocol Buffers在數(shù)據(jù)采集與傳輸系統(tǒng)建設(shè)方式論文

實(shí)用文 時(shí)間:2021-08-31 手機(jī)版

  隨著通信技術(shù)和傳感器技術(shù)的不斷發(fā)展,數(shù)據(jù)采集與傳輸系統(tǒng)得到了越來越廣泛的應(yīng)用。而Google Protocol Buffers是Google公司開發(fā)是一款非常優(yōu)秀的庫,其定義了緊湊的、可擴(kuò)展的二進(jìn)制消息格式,特別適合用于數(shù)據(jù)傳輸。本文著重介紹了使用Protocol Buffers的對(duì)數(shù)據(jù)的封裝和其反射機(jī)制來實(shí)現(xiàn)數(shù)據(jù)采集與傳輸系統(tǒng)的快速擴(kuò)展采集數(shù)據(jù)類型。

Protocol Buffers在數(shù)據(jù)采集與傳輸系統(tǒng)建設(shè)方式論文

  1 Protocol Buffers概述

  1.1 簡(jiǎn)介

  Protocol Buffers(以下簡(jiǎn)稱ProtoBuf)是由Google開發(fā)的一種數(shù)據(jù)描述語言。ProtoBuf定義了一種緊湊的可擴(kuò)展二進(jìn)制消息格式,能對(duì)結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行靈活的、高效的、自動(dòng)的機(jī)制來進(jìn)行序列化。ProtoBuf可擴(kuò)展方式的序列化結(jié)構(gòu)數(shù)據(jù)被廣泛應(yīng)用在通信協(xié)議、數(shù)據(jù)存儲(chǔ)等領(lǐng)域。

  1.2 ProtoBuf的性能

  一條消息數(shù)據(jù),用ProtoBuf序列化后的大小是JSON的十分之一,是XML格式的二十分之一,是二進(jìn)制序列化的十分之一。總體看來ProtoBuf的優(yōu)勢(shì)還是非常明顯的。

  2 應(yīng)用在數(shù)據(jù)采集與傳輸系統(tǒng)中

  這里所設(shè)計(jì)的數(shù)據(jù)采集與傳輸系統(tǒng)采用Slave-Master結(jié)構(gòu)。其中Slave負(fù)責(zé)采集數(shù)據(jù)并將數(shù)據(jù)發(fā)送給Master;Master接收所采集的數(shù)據(jù)并做進(jìn)一步處理。Slave可以支持多種數(shù)據(jù)類型(如GPS、圖像等)的采集。

  2.1 根據(jù)不同的采集數(shù)據(jù)類型,編寫proto文件

  在ProtoBuf中,所有的對(duì)象都被視為消息。消息的每個(gè)屬性描述都可以使用required、optional、repeated來進(jìn)行描述。ProtoBuf數(shù)據(jù)描述語言中也支持一些基本的數(shù)據(jù)類型如string、int32、double等等。

  設(shè)Slave的采集數(shù)據(jù)類型有Type1、Type2。這兩種類型的Proto描述命名為MsgType1和MsgType2(圖1所示)。

  經(jīng)proto編譯后,生成的消息類為MsgType1和MsgType2,它們均繼承自google::protobuf::Message類。

  2.2 設(shè)計(jì)支持不同采集數(shù)據(jù)類型的數(shù)據(jù)傳輸格式

  在數(shù)據(jù)傳輸中使用ProtoBuf需要解決兩個(gè)問題,一是數(shù)據(jù)的長(zhǎng)度:ProtoBuf打包的數(shù)據(jù)沒有自帶長(zhǎng)度信息或終結(jié)符,這就需要由應(yīng)用程序自己在發(fā)生和接收的時(shí)候做正確的分割;二是消息類型:ProtoBuf打包的數(shù)據(jù)沒有自帶的類型信息,在消息傳輸過程中,發(fā)送方需要將消息類型告訴接收方,接收方根據(jù)消息類型再做反序列化。對(duì)于長(zhǎng)度問題,可以將長(zhǎng)度信息作為消息的一個(gè)段來解決。而對(duì)于消息類型問題,可以使用ProtoBuf根據(jù)消息的類型名反射自動(dòng)創(chuàng)建對(duì)應(yīng)的消息對(duì)象的機(jī)制來解決。因此,可以設(shè)計(jì)基本傳輸格式的格式如圖2所示:

  ProtoBuf Message的序列化數(shù)據(jù)封裝在message_data中,且稱這種數(shù)據(jù)格式為Message Package(消息包)。

  2.3 消息打包器的設(shè)計(jì)

  消息包格式設(shè)計(jì)完后,首先要對(duì)不同的采集數(shù)據(jù)類型編寫封裝函數(shù),以便將相應(yīng)類型的數(shù)據(jù)封裝到對(duì)應(yīng)的ProtoBuf Message中。然后使用消息打包器將Slave所采集的某種類型的數(shù)據(jù)信息打包成上圖的消息包。消息打包器先通過ProtoBuf將特定類型的采集數(shù)據(jù)進(jìn)行序列化,并生填充Message Data。最后再填充Message Package中的Length 、Message Name等字段,完成消息的打包操作。消息打包器代碼如下:

  std::string CreateMsgPackage( const google::protobuf::Message& msg )

  {

  std::string msg_pack;

  msg_pack.resize( sizeof( int32_t ) );

  string& msg_name = msg.GetTypeName();

  int32_t name_len = msg_name.size()+1;

  msg_pack.append((char*)&name_len,sizeof(name_len));

  msg_pack.append(msg_name.c_str(),name_len);

  Msg.AppendToString(&msg_pack);

  char* begin = msg_pack.c_str()+sizeof( int32_t );

  int32_t length = msg_pack.size()-sizeof(int32_t);

  std::copy( (char*)( &length ), (char*)( Length ) +

  sizeof( Length ), msg_pack.begin );

  return msg_pack;

  }

  2.4 消息解包器的設(shè)計(jì)

  接收到消息包之后要進(jìn)行解封裝,分解出消息包中的各個(gè)字段,這里不再詳述。ProtoBuf本身具有很強(qiáng)的反射機(jī)制,ProtoBuf可以能根據(jù)Message Name創(chuàng)建一個(gè)該類型的消息,然后使用Message Data來反序列化該消息,從而在Message Package中恢復(fù)出相應(yīng)類型的Message,由此完成對(duì)消息的識(shí)別。由消息包來還原相應(yīng)的消息的代碼如下:

  Message* CreateMsg( std::string& msg_pack )

  {

  // 從msg_pack中分離msg_name、msg_data等的代碼從略

  Message* msg = NULL;

  Descriptor* desc = DescriptorPool::generated_pool()->FindMessageTypeByName(msg_name);

  Message* prototype = MessageFactory::generated_factory()->GetPrototype(desc);

  msg = prototype->New();

  msg->ParseFromArray(msg_data, msg_data_len);

  return msg;

  }

  2.5 消息分發(fā)器的設(shè)計(jì)

  Master在得到相應(yīng)類型的采集數(shù)據(jù)消息后,需要傳遞給相應(yīng)的消息處理方法,這就涉及到消息的分發(fā)。消息分發(fā)器可以使用map來實(shí)現(xiàn),由于每個(gè)具體消息類型都有一個(gè)全局的Descriptor對(duì)象,其地址是唯一的,可作為key;value為針對(duì)特定采集數(shù)據(jù)類型消息的處理函數(shù),即std::map,其中MessageCallBack為 boost::function。由于消息分發(fā)器傳給處理函數(shù)的參數(shù)是Message*類型,處理函數(shù)需要對(duì)其進(jìn)行向下轉(zhuǎn)型后才能使用。消息分發(fā)器在接收到某一消息后,在map中查找對(duì)應(yīng)的處理函數(shù),并執(zhí)行該函數(shù)。

  2.6 整體結(jié)構(gòu)

  在Slave端,用戶需要使用proto數(shù)據(jù)描述語言描述該類型的數(shù)據(jù),并產(chǎn)生相應(yīng)的Message類型,此外用戶還要編寫相應(yīng)數(shù)據(jù)類型消息封裝方法。在Master端,由于與Slave使用相同的proto文件,消息解包器可以分辨出相應(yīng)類型的Message。用戶在Master端需要編寫針對(duì)某具體類型采集數(shù)據(jù)的處理方法,并向消息分發(fā)器注冊(cè)。消息分發(fā)器將消息解包器解出的消息作為參數(shù)調(diào)用對(duì)應(yīng)的處理方法。

  3 結(jié)束語

  在Slave-Master結(jié)構(gòu)的系統(tǒng)中通過編寫proto文件來描述各種類型的采集數(shù)據(jù);在Slav e端進(jìn)行采集數(shù)據(jù)的序列化和封裝;在Master端編寫對(duì)應(yīng)的采集數(shù)據(jù)處理方法,并將該方法注冊(cè)到Master的消息分發(fā)器中,完成對(duì)采集數(shù)據(jù)類型的快速擴(kuò)展。

  Protocol Buffers .https://developers.google.com/protocol-buffers/docs/overview.

  陳碩.Linux多線程服務(wù)端編程——使用muduo C++網(wǎng)絡(luò)庫.北京:電子工業(yè)出版社.2013:220-236.

  李紀(jì)欣,王康,周立法,章軍.Google Protobuf在Linux Socket通訊中的應(yīng)用.電腦開發(fā)與應(yīng)用.2013,26(4).

  田源,潘晨光,丁杰.Protocol Buffers在即時(shí)通訊系統(tǒng)中的應(yīng)用研究 .現(xiàn)代電子技術(shù).2013,37(5)


本文來源http://www.nvnqwx.com/shiyongwen/1657706.htm
以上內(nèi)容來自互聯(lián)網(wǎng),請(qǐng)自行判斷內(nèi)容的正確性。若本站收錄的信息無意侵犯了貴司版權(quán),請(qǐng)給我們來信(zaixianzuowenhezi@gmail.com),我們會(huì)及時(shí)處理和回復(fù),謝謝.
国产精品尤物福利片在线观看_少妇免费毛片久久久久久久久_久久久久成人精品免费播放动漫_日韩av综合在线观看
日本高清不卡一区二区三| 日本欧美中文字幕| 亚洲一区二区三区四区中文| 日本一区二区在线| 国产又黄又猛视频| 久久精品在线免费视频| 色综合久久88色综合天天看泰| 日韩国产精品一区二区| 国产精品一区=区| 国产成人精品在线播放| 亚洲欧美日韩不卡| 国产女人水真多18毛片18精品| 久久精品美女| 久久香蕉频线观| 日韩欧美在线免费观看视频| 国产福利一区二区三区在线观看| 亚洲精品第一区二区三区| www.av中文字幕| 亚洲欧洲免费无码| 97国产在线播放| 午夜精品一区二区三区在线| 91九色对白| 日本一区网站| zzijzzij亚洲日本成熟少妇| 欧美亚洲在线观看| 久久九九免费视频| 国产一区精品视频| 一道本在线观看视频| 超碰97在线播放| 亚洲AV无码成人精品一区| 91精品国产高清| 欧美一级免费看| 日韩最新在线视频| 蜜桃久久影院| 欧美激情乱人伦一区| 白嫩少妇丰满一区二区| 大地资源第二页在线观看高清版| 久久偷窥视频| 欧美在线一级va免费观看| 国产精品久久久久免费a∨大胸| 国产中文一区二区| 亚洲高清视频一区| 久久久精品日本| 国产一区玩具在线观看| 欧美成人精品在线观看| 91看片淫黄大片91| 日韩美女视频中文字幕| 国产精品国产三级国产aⅴ浪潮 | 精品国产av无码一区二区三区| 免费精品视频一区| 亚洲一区二区精品在线观看| 久久爱av电影| 国产一区亚洲二区三区| 午夜精品久久久久久久99热浪潮 | 日本wwww视频| 欧美乱妇40p| 8050国产精品久久久久久| 欧美自拍资源在线| 欧美极品第一页| 久久超碰亚洲| 国产精品一区在线播放| 日韩久久久久久久久久久久| 欧美精品生活片| 国产二区视频在线| 国产日韩欧美日韩| 日韩欧美一区二区视频在线播放| 久久夜色精品国产欧美乱| 成人免费毛片播放| 欧美又粗又长又爽做受| 一女被多男玩喷潮视频| 久久久极品av| 91高跟黑色丝袜呻吟在线观看| 欧美精品免费观看二区| 亚洲三区在线| 国产精品丝袜高跟| 国产精品av在线播放| 日本中文字幕在线视频观看 | 欧美一区1区三区3区公司| 国产精品国产对白熟妇| 久久久久久a亚洲欧洲aⅴ| 欧美成人第一区| 懂色av粉嫩av蜜臀av| 国产精品第3页| 久草视频国产在线| 欧美日韩精品免费观看视一区二区| 少妇特黄a一区二区三区| 日韩av一区二区三区在线| 青青青在线视频播放| 亚洲最大激情中文字幕| 久久精品国产亚洲精品2020| 91精品久久久久久久久| 国产一区二区免费在线观看| 日韩美女视频中文字幕| 亚洲不卡1区| 欧美精品亚州精品| 久久久噜噜噜久久中文字免| 不卡视频一区| 国产伦精品一区二区三| 免费观看精品视频| 欧美中文字幕精品| 日韩国产一级片| 日本在线观看一区| 岛国一区二区三区高清视频| 中文字幕一区综合| 欧美激情精品久久久久久黑人| 国产精品成人v| 国产精品久久中文字幕| 久久深夜福利免费观看| 久久久国产视频91| 俺去啦;欧美日韩| 久久日韩精品| 91av免费看| 91精品一区二区三区四区| 国产欧美精品日韩精品| 国产区精品在线观看| 国产日韩欧美电影在线观看| 黄色国产精品一区二区三区| 欧美在线日韩精品| 青草成人免费视频| 欧美日韩电影一区二区三区| 秋霞无码一区二区| 人人妻人人添人人爽欧美一区| 日韩午夜视频在线观看| 日韩**中文字幕毛片| 日本在线视频www色| 亚洲v日韩v综合v精品v| 午夜精品美女自拍福到在线| 亚洲国产欧美一区二区三区不卡| 亚洲国产欧洲综合997久久| 午夜精品一区二区三区在线视| 亚洲v国产v在线观看| 熟女少妇在线视频播放| 日产精品高清视频免费| 人妻无码一区二区三区四区| 欧美一区亚洲二区| 黄色大片在线免费看| 精品一区二区三区视频日产| 国产日韩成人内射视频| 不卡影院一区二区| 久久天天狠狠| 久久久久久久久久久av| 久久国产精品久久| 国产精品美女免费| 久久国产视频网站| 亚洲欧美日韩精品综合在线观看| 岛国视频一区免费观看| 人人妻人人澡人人爽精品欧美一区 | 国产精品少妇在线视频| 久久久久久久久久网| 日韩中文字幕第一页| 久久久免费电影| 久久久久久久国产精品| 久热99视频在线观看| 欧美激情在线有限公司| 亚洲欧洲精品在线| 热久久免费国产视频| 国产一区在线免费| 国产精品91久久| 久久九九免费视频| 在线观看一区欧美| 日韩欧美亚洲天堂| 国产在线精品自拍| 91精品免费视频| 久久久国产精品x99av| 在线观看欧美亚洲| 日韩成人在线资源| 国产在线观看福利| 国产精品777| 国产精品美女主播| 亚洲精品免费在线视频| 欧美久久在线| www婷婷av久久久影片| 九一国产精品视频| 在线天堂一区av电影| 人人妻人人做人人爽| 国产乱子伦精品| 日韩中文字幕视频在线| 欧美激情网站在线观看| 日韩国产欧美精品| 国产精品一区在线免费观看| 久久综合入口| 欧美巨大黑人极品精男| 日韩五码在线观看| 国产精品综合不卡av| www.日韩.com| 亚洲v国产v| 国产欧美日韩精品丝袜高跟鞋| 久久久久久久久久久久av| 一本—道久久a久久精品蜜桃| 欧美亚洲国产视频| 97久久久免费福利网址| 青青草视频国产| 欧美成人在线免费| 亚洲女人毛片| 日韩久久久久久久久久久久久| 国产免费一区二区三区四在线播放 | 日本一区二区在线播放| 国产欧美日韩免费| 久久色精品视频| 欧美一级片在线播放|