色噜噜人体337p人体 I 超碰97观看 I 91久久香蕉国产日韩欧美9色 I 色婷婷我要去我去也 I 日本午夜a I 国产av高清怡春院 I 桃色精品 I 91香蕉国产 I 另类小说第一页 I 日操夜夜操 I 久久性色 I 日韩欧在线 I 国产深夜在线观看 I 免费的av I 18在线观看视频 I 他也色在线视频 I 亚洲熟女中文字幕男人总站 I 亚洲国产综合精品中文第一 I 人妻丰满熟av无码区hd I 新黄色网址 I 国产精品真实灌醉女在线播放 I 欧美巨大荫蒂茸毛毛人妖 I 国产一区欧美 I 欧洲亚洲1卡二卡三卡2021 I 国产亚洲欧美在线观看三区 I 97精品无人区乱码在线观看 I 欧美妇人 I 96精品在线视频 I 国产人免费视频在线观看 I 91麻豆国产福利在线观看

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

時間:2022-09-11 20:28:06 論文 我要投稿
  • 相關(guān)推薦

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

  隨著通信技術(shù)和傳感器技術(shù)的不斷發(fā)展,數(shù)據(jù)采集與傳輸系統(tǒng)得到了越來越廣泛的應(yīng)用。而Google Protocol Buffers是Google公司開發(fā)是一款非常優(yōu)秀的庫,其定義了緊湊的、可擴(kuò)展的二進(jìn)制消息格式,特別適合用于數(shù)據(jù)傳輸。本文著重介紹了使用Protocol Buffers的對數(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 簡介

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

  1.2 ProtoBuf的性能

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

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

  這里所設(shè)計的數(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中,所有的對象都被視為消息。消息的每個屬性描述都可以使用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è)計支持不同采集數(shù)據(jù)類型的數(shù)據(jù)傳輸格式

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

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

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

  消息包格式設(shè)計完后,首先要對不同的采集數(shù)據(jù)類型編寫封裝函數(shù),以便將相應(yīng)類型的數(shù)據(jù)封裝到對應(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ìn)行解封裝,分解出消息包中的各個字段,這里不再詳述。ProtoBuf本身具有很強(qiáng)的反射機(jī)制,ProtoBuf可以能根據(jù)Message Name創(chuàng)建一個該類型的消息,然后使用Message Data來反序列化該消息,從而在Message Package中恢復(fù)出相應(yīng)類型的Message,由此完成對消息的識別。由消息包來還原相應(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è)計

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

  3 結(jié)束語

  在Slave-Master結(jié)構(gòu)的系統(tǒng)中通過編寫proto文件來描述各種類型的采集數(shù)據(jù);在Slav e端進(jìn)行采集數(shù)據(jù)的序列化和封裝;在Master端編寫對應(yīng)的采集數(shù)據(jù)處理方法,并將該方法注冊到Master的消息分發(fā)器中,完成對采集數(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在即時通訊系統(tǒng)中的應(yīng)用研究 .現(xiàn)代電子技術(shù).2013,37(5)

【Protocol Buffers在數(shù)據(jù)采集與傳輸系統(tǒng)建設(shè)方式論文】相關(guān)文章:

FPGA數(shù)據(jù)采集與回放系統(tǒng)設(shè)計論文04-24

用電信息采集系統(tǒng)建設(shè)工作總結(jié)06-23

數(shù)據(jù)挖掘論文07-15

數(shù)據(jù)挖掘論文07-16

數(shù)據(jù)采集工程師崗位職責(zé)02-22

商譽(yù)計量方式的論文05-03

商譽(yù)計量方式的論文05-03

商譽(yù)計量方式的論文05-03

商譽(yù)計量方式的論文05-03

商譽(yù)計量方式的論文05-03

主站蜘蛛池模板: 国内精品视频在线观看九九 | 成人天堂婷婷青青视频在线观看 | 国产一卡2卡3卡4卡网站贰佰 | 黄色av免费在线播放 | 盗摄牛牛av影视一区二区 | jlzzjlzz亚洲女人18| 四季av一区二区三区 | 中文国产 | 亚洲精品欧美激情 | 久久躁狠狠躁夜夜av | 国产情侣自拍一区 | 日日射射 | 亚洲欧美天堂 | 国产美熟女乱又伦av果冻传媒 | 九艹在线 | 一本久道久久综合久久爱 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 国产日本欧美在线观看 | 久久天天躁夜夜躁狠狠躁综合 | 丁香婷婷六月天 | 成人美女黄网站色大免费的 | 粗大的内捧猛烈进出少妇 | 可以直接免费观看的av网站 | 国产爽爽久久影院hd | 亚洲国产在一区二区三区 | 免费久久精品 | 免费无码无遮挡裸体视频在线观看 | 人妻丰满熟妇aⅴ无码区 | 92看片淫黄大片看国产片图片 | 国产欧美在线一区 | 中文字幕在线综合 | 热久久久久久久 | 欧美日韩精品一区二区三区四区 | 国产亚洲综合视频在线 | 亚洲色欲色欱www在线 | 亚洲精品乱码久久久久久蜜桃欧美 | 91成人海角社区 | 免费在线国产视频 | 日本毛片在线观看 | 国产蜜臀97一区二区三区 | 久久国产精品影视 | 欧美精品久久 | 99精品全国免费观看视频 | 97se亚洲国产综合自在线 | 精品久久久久久无码专区 | 永井玛利亚 精品 国产 一区 | 国产挤奶水主播在线播放 | 免费福利av | 很黄很污的视频 | 密臀av| 肉嫁高柳动漫在线观看 | 黄色中文字幕 | 少妇嘿咻做爰吃奶摸视频网站 | 美日韩一级 | 国产裸体写真av一区二区 | 中国凸偷窥xxxx自由视频 | 2021久久国自产拍精品 | 亚洲天堂一区在线观看 | 婷婷色婷婷开心五月四房播播久久 | av区无码字幕中文色 | 亚洲成人黄色片 | www.亚洲自拍| 免费在线观看黄色片 | 偷窥高潮呻吟啪啪另类 | 古装人性做爰av网站 | 欧美在线色 | 亚洲福利视频网站 | 欧美婷婷 | 伊人久久久久久久久 | 久久无码超清激情av | 国产丝袜一区二区三区 | 懂色av噜噜一区二区三区av | 最新国产精品自在线观看 | 欧美天天拍在线视频 | 欧美少妇15p | 久激情内射婷内射蜜桃 | 亚洲国产aⅴ精品一区二区的游戏 | 777精品出轨人妻国产 | 久热欧美 | 亚洲第一页中文字幕 | 日韩欧美视频网站 | 亚洲综合网址 | 欧美日本视频在线 | 亚洲少妇精品 | 天天天天天天天操 | 狠狠色噜狠狠狠狠 | 91日日日 | 亚洲综合视频在线 | 精品精品| av无码av无码专区 | 亚洲美女又黄又爽在线观看 | 色大师在线观看免费播放 | 天天做天天爱天天要天天 | 欧美三级一区二区三区 | 乌克兰粉嫩xxx极品hd | 精品国产一区二区三区四区阿崩 | 色婷婷视频在线 | 久久国产精品99久久久久久丝袜 | 久草免费福利资源站在线观看 |