范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

ProtocolBuffers在数据采集与传输系统建设方式论文

  随着通信技术和传感器技术的不断发展,数据采集与传输系统得到了越来越广泛的应用。而Google Protocol Buffers是Google公司开发是一款非常优秀的库,其定义了紧凑的、可扩展的二进制消息格式,特别适合用于数据传输。本文着重介绍了使用Protocol Buffers的对数据的封装和其反射机制来实现数据采集与传输系统的快速扩展采集数据类型。
  1 Protocol Buffers概述
  1.1 简介
  Protocol Buffers(以下简称ProtoBuf)是由Google开发的一种数据描述语言。ProtoBuf定义了一种紧凑的可扩展二进制消息格式,能对结构化的数据进行灵活的、高效的、自动的机制来进行序列化。ProtoBuf可扩展方式的序列化结构数据被广泛应用在通信协议、数据存储等领域。
  1.2 ProtoBuf的性能
  一条消息数据,用ProtoBuf序列化后的大小是JSON的十分之一,是XML格式的二十分之一,是二进制序列化的十分之一。总体看来ProtoBuf的优势还是非常明显的。
  2 应用在数据采集与传输系统中
  这里所设计的数据采集与传输系统采用Slave-Master结构。其中Slave负责采集数据并将数据发送给Master;Master接收所采集的数据并做进一步处理。Slave可以支持多种数据类型(如GPS、图像等)的采集。
  2.1 根据不同的采集数据类型,编写proto文件
  在ProtoBuf中,所有的对象都被视为消息。消息的每个属性描述都可以使用required、optional、repeated来进行描述。ProtoBuf数据描述语言中也支持一些基本的.数据类型如string、int32、double等等。
  设Slave的采集数据类型有Type1、Type2。这两种类型的Proto描述命名为MsgType1和MsgType2(图1所示)。
  经proto编译后,生成的消息类为MsgType1和MsgType2,它们均继承自google::protobuf::Message类。
  2.2 设计支持不同采集数据类型的数据传输格式
  在数据传输中使用ProtoBuf需要解决两个问题,一是数据的长度:ProtoBuf打包的数据没有自带长度信息或终结符,这就需要由应用程序自己在发生和接收的时候做正确的分割;二是消息类型:ProtoBuf打包的数据没有自带的类型信息,在消息传输过程中,发送方需要将消息类型告诉接收方,接收方根据消息类型再做反序列化。对于长度问题,可以将长度信息作为消息的一个段来解决。而对于消息类型问题,可以使用ProtoBuf根据消息的类型名反射自动创建对应的消息对象的机制来解决。因此,可以设计基本传输格式的格式如图2所示:
  ProtoBuf Message的序列化数据封装在message_data中,且称这种数据格式为Message Package(消息包)。
  2.3 消息打包器的设计
  消息包格式设计完后,首先要对不同的采集数据类型编写封装函数,以便将相应类型的数据封装到对应的ProtoBuf Message中。然后使用消息打包器将Slave所采集的某种类型的数据信息打包成上图的消息包。消息打包器先通过ProtoBuf将特定类型的采集数据进行序列化,并生填充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 消息解包器的设计
  接收到消息包之后要进行解封装,分解出消息包中的各个字段,这里不再详述。ProtoBuf本身具有很强的反射机制,ProtoBuf可以能根据Message Name创建一个该类型的消息,然后使用Message Data来反序列化该消息,从而在Message Package中恢复出相应类型的Message,由此完成对消息的识别。由消息包来还原相应的消息的代码如下:
  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 消息分发器的设计
  Master在得到相应类型的采集数据消息后,需要传递给相应的消息处理方法,这就涉及到消息的分发。消息分发器可以使用map来实现,由于每个具体消息类型都有一个全局的Descriptor对象,其地址是唯一的,可作为key;value为针对特定采集数据类型消息的处理函数,即std::map,其中MessageCallBack为 boost::function。由于消息分发器传给处理函数的参数是Message*类型,处理函数需要对其进行向下转型后才能使用。消息分发器在接收到某一消息后,在map中查找对应的处理函数,并执行该函数。
  2.6 整体结构
  在Slave端,用户需要使用proto数据描述语言描述该类型的数据,并产生相应的Message类型,此外用户还要编写相应数据类型消息封装方法。在Master端,由于与Slave使用相同的proto文件,消息解包器可以分辨出相应类型的Message。用户在Master端需要编写针对某具体类型采集数据的处理方法,并向消息分发器注册。消息分发器将消息解包器解出的消息作为参数调用对应的处理方法。
  3 结束语
  在Slave-Master结构的系统中通过编写proto文件来描述各种类型的采集数据;在Slav e端进行采集数据的序列化和封装;在Master端编写对应的采集数据处理方法,并将该方法注册到Master的消息分发器中,完成对采集数据类型的快速扩展。
  Protocol Buffers .https://developers.google.com/protocol-buffers/docs/overview.
  陈硕.Linux多线程服务端编程——使用muduo C++网络库.北京:电子工业出版社.2013:220-236.
  李纪欣,王康,周立法,章军.Google Protobuf在Linux Socket通讯中的应用.电脑开发与应用.2013,26(4).
  田源,潘晨光,丁杰.Protocol Buffers在即时通讯系统中的应用研究 .现代电子技术.2013,37(5)

建筑毕业论文范文由于当前社会经济科技发展的需求,建筑工程项目的范围逐渐加大,工程专业性和建筑规模与日俱增。同时随着现代建筑施工体系走向专业化,分工越来越细,实际建筑工程往往需要多个专业企业分工完成海洋石油平台在线监测系统结构研究论文在线监测系统的框架结构基本类似,利用现有的中海油企业自身局域网实现内部信息传输共享,状态监测故障诊断中心的人员与油田各平台设备管理人员都能利用客户端登陆在线监测系统,可以浏览当前设养成教育论文范文摘要40篇摘要纲要指出在幼儿生活经验的基础上,帮助幼儿了解自然,环境与人类生活的关系。从身边的小事入手,培养初步的环保意识和行为。究竟如何在幼儿园中有目的有计划的实施环境教育活动,本文通过环职业院校学生人才教育思想论文一李鸿章的教育思想(一)凡事预则立,不预则败,谋定而后动李鸿章教育认为谋略是一个人立身行事必要的前期准备,事情发展的过程中,随机应变是一个人取得成功的必要保障也是必备品质。他教育人深化实验教学研究提高实验教学水平论文论文摘要对实验教学中现存的问题进行研究和改进,以促进实验教学水平的不断提高。论文关键词实验教学创新精神一切自然科学都来源于实践,都是在对自然现象观察的基础上从生产实践和科学实验总结高校财务预算审计管理路径研究论文近年来,随着国家教育投入力度加大,学校对教学科研的投入逐年增多,教学经费科研经费管理经费等随之增加。审计部门对预算执行情况进行审计,能有效地防止资金使用过程中的不合理现象发生,控制会计毕业论文实用范本完成毕业论文的写作,是我们结束在校学习过程的最后步骤。快来看看会计毕业论文实用范本吧!人力资源会计实践应用摘要在本文中,于我国建立人力资源会计的必要性出发,讨论了人力资源会计的计量教育论文转换教学方式音乐欣赏课轻松搞定解放后,我国长期沿袭的是前苏联凯洛夫的教育体系,在很长一断时间里,教师习惯了以教师为中心以课本为中心以课堂为中心。适应了复习提问导入新课传授新课练习巩固复习小结的五步教学法。而我们呼唤融入乡愁的传统文化教育论文导语春节,总与家相伴相随。欢聚时的畅快,离别时的忧伤,沉潜成每一个龙的传人的乡愁。然而,在当代中国,乡愁不仅仅是人对于家乡和曾经生活场景的持久的深刻的美好的眷恋的心理活动,还有伴随工程设计项目过程控制研究论文1建筑工程设计项目过程管理分析1。1项目设计过程项目设计过程主要是指在现行建筑工程基本建设程序下每一个设计项目所需要经历的设计过程。对项目设计过程图进行研究不难发现,输入作为项目设小学语文作文教学论文集导语教学论文是教师教学经验和教学研究成果在写作上的表现,简单的说,就是教师将平时教学中的一些经验或研究进行了总结,并综合运用综合理论知识进行分析和讨论。下面由小编为大家整理的小学语
领导者如何提高讲话的含金量讲话是人类表达思想传递情感陈述事物展示魅力的重要方式。人们可从一个人的话语中,深切感知其道德修养纯度理论底蕴厚度独自思考深度待人情感诚度和语言表达精度等丰富信息,进而对其作出品位鉴浅谈向上领导的艺术投资体系是由股票债券和一些房地产组成的。但是投资精英知道,这些只是投资渠道的冰山一角另类投资其实一点都不另类,它们正在成为成功的整体投资策略的一部分。作者分别从回报率整体市场投资策组织成员修养的新思考探析一组织与个人的关系西方道德价值观的核心是个人主义,而中国道德价值观的核心是整体主义。个人主义最早是由法国学者托克维尔提出的,强调个人自由及个人自主与尊严,不受外来的约束。在权利中,浅谈风电产业的快速发展与人才培养策略我国自1986年建立第一个风电场以来,风电产业在我国得到空前发展。截至2013年12月,风电累计核准容量13765万千瓦,累计并网容量7716万千瓦,继续保持世界风电装机量第一。随探析当前行政事业单位内部审计职能的转变行政事业单位的内部审计是行政事业单位内部依法建立监督行政事业单位内部一切工作活动的专项工作,主要通过对单位内部的财务工作和经济活动进行监测和评估,确保活动的合法性和工作信息资料的真基于服装营销原理课程的案例项目情境式训练教学方法服装营销原理课程是服装设计与工程专业的专业基础课程,是一门综合性和实践性较强的学科。该课程在人才培养的指导思想上,遵循浙江科技学院的办学特色,结合中国国情,培养具有实践能力创新精神试论供电企业电能采集与回收的可行性研究一供电企业营销专业管理方法1。1电能量信息采集管理系统建设是供电公司构建智能电网的重要组成部分,也是SG186营销业务系统的核心业务之一。电能量信息采集管理系统建设要求在一定的时间理性选择理论下的网络消费研究一引言近年来,互联网技术不断发展,人们的生活依托于这张神奇的网络迅速变更着轨迹,不断地渗透于传统消费之中,在一定程度上造就了网络消费这一种新型的消费方式,也使之成为了当下主要流行的浅析审计组长的工作职责和应具备的能力一审计组长应履行的工作职责(一)审计实施阶段的工作职责1。起草审计通知书审计项目计划或审计工作方案一下达,实施审计项目的审计组长就要着手起草审计通知书,并按照国家审计准则的规定向被WPS文档的安全性设置WPS文档是通过WPS文字处理软件编辑的电子文档,和WORD文档一样,都是存储文字资料的电子文档。在现代化办公中,为了高效快捷地办公,一些文件的传阅常会以WPS文档的形式通过电子邮北部湾经济区城市管理人才供求探索摘要北部湾经济区开放开发进程的加快及城市化进程的加快,对城市管理专业人才的培养提出了新的要求。笔者从北部湾经济区高校城市管理人才培养的现状出发,探究其人才供给情况进而基于社会发展的