基于FlatBuffers的物联网高效数据传输方法与流程

文档序号:20677768发布日期:2020-05-08 18:03阅读:751来源:国知局
基于FlatBuffers的物联网高效数据传输方法与流程

本发明涉及物联网技术领域,尤其涉及基于flatbuffers的物联网高效数据传输方法。



背景技术:

mqtt(messagequeuingtelemetrytransport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于tcp/ip协议上,由ibm在1999年发布,mqtt协议中有三种身份:发布者(pushlish)、代理(broker)(服务器)、订阅者(subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。mqtt最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

mqtt通讯协议是为大量计算能力有限,且工作在低宽带、不可靠的网络的远程传感器或者控制通讯设计的协议,它具有如下特性:1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合:2)对负载内容屏蔽的消息传输;3)使用tcp/ip提供网络连接;4)有三种消息发布服务质量(qos):

最多一次:消息发布完全依赖底层tcp/ip网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。

至少一次:确保消息到达,但消息重复可能会发生。

只有一次:确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的app的推送,确保用户收到且只会收到一次。

除了第一种消息发布服务质量外,消息内容均需要被临时保存。同时,在实际项目中,broker侧会收集发布的信息,保存到各类数据库中用来进行数据分析,ai学习,以及策略判断等。目前主流技术基本采用json(javascriptobjectnotation)格式来保存消息中的报文有效载荷payload数据。虽然使用简单易懂,但是本身在数据保存的尺寸,以及数据处理的速度上存在问题。尤其对于最高100万级别的设备连接,每秒超过1万次的数据发布场合,broker服务器的数据转存压力会非常大。在面向大规模mqtt连接,事件发布吞吐量高的物联网等环境中,基于json的payload数据保存方案,存在着数据尺寸大并且数据处理速度慢的问题。



技术实现要素:

本发明的目的在于提供基于flatbuffers的物联网高效数据传输方法,从而解决现有技术中基于json的payload数据保存方法存在着数据尺寸大并且数据处理速度慢的问题。

为了实现上述目的,本发明采用的技术方案如下:

基于flatbuffers的物联网高效数据传输方法,包括以下步骤:

s1)发布者publisher获取消息,对消息使用flatbuffers进行序列化处理;

s2)对序列化处理的消息进行传输;

s3)mqtt服务器获取序列化处理后的消息,对序列化处理后的消息使用flatbuffers进行反序列化处理;

s4)订阅者subscriber获取序列化处理后的消息并使用flatbuffers对序列化处理后的消息进行反序列化处理。

flatbuffers是一个开源的跨平台数据序列化库,可以应用到几乎任何语言(c++,c#,go,java,javascript,php,python),flatbuffers把结构化的对象用一个扁平化(flat)的缓冲区保存,即把内存对象数据保存在一个一维的数组中。这样的设计使得flatbuffers具有以下的优点:对序列化数据的访问不需要打包和拆包,flatbuffers将序列化数据存储在缓存中,这些数据既可以存储在文件中,又可以通过网络原样传输,而没有任何解析开销;访问数据时唯一内存需求是缓冲区,不需要额外的内存分配,内存效率高,速度快;仅仅需要自动生成的少量代码和一个单一的头文件依赖,易于集成到现有系统中;能够跨平台使用,而且具有强类型设计,扩展性好。我们在mqtt的协议payload中使用flatbuffers的数据协议,可以大大的降低报文中挟带数据的长度,同时大大降低数据的序列化以及反序列化成本。

进一步的,步骤s1)中消息包括固定报头(fixedheader)、可变报头(variableheader)和报文有效载荷(payload)。

进一步的,对消息中的报文有效载荷使用flatbuffers进行序列化处理。

进一步的,对消息中的报文有效载荷使用flatbuffers进行反序列化处理。

进一步的,序列化处理,包括步骤:

s11)定义数据结构,编写schema文件;

s12)使用flatbuffers编译器flatc对schema文件进行编译,获得编译后的文件;

s13)使用工具编译flatbuffers的源代码,获得flatbuffers的jar包,工具包括maven工具;

s14)在mqtt工程中增加flatbuffers的jar包及编译后的文件;

s15)使用flatbufferbuilder构造一个序列化对象,将mqtt的报文有效载荷放入序列化对象中;

s16)对所述序列化对象缓存区中的数据进行保存或发送。

进一步的,反序列化处理,包括从所述序列化对象缓存区中读取对应的数据,所述对应的数据包括报文有效载荷。

本发明的有益效果是:本发明利用flatbuffers数据协议进行序列化处理以及反序列化,能够降低数据报文中挟带数据的长度,同时降低数据的序列化以及反序列化成本。

附图说明

图1是本发明实施例一整体流程图。

图2是本发明实施例一mqtt通讯协议数据传输示意图。

图3是本发明实施例一flatbuffers与json的性能对比图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。

实施例一,如图1和图2所示,基于flatbuffers的物联网高效数据传输方法,其特征在于,包括以下步骤:

s1)发布者publisher获取消息,消息包括固定报头、可变报头和报文有效载荷,对报文有效载荷使用flatbuffers进行序列化处理,如图2所示,包括步骤:

s11)定义数据结构,编写schema文件;

s12)使用flatbuffers编译器flatc对schema文件进行编译,获得编译后的文件;

s13)使用工具编译flatbuffers的源代码,获得flatbuffers的jar包;

s14)在mqtt工程中增加flatbuffers的jar包及编译后的文件;

s15)使用flatbufferbuilder构造一个序列化对象,将mqtt的报文有效载荷放入序列化对象缓存区中;

s16)对所述序列化对象缓存区中的数据进行保存或发送。

s2)对序列化处理的消息进行传输;

s3)mqtt服务器获取序列化处理后的消息,对序列化处理后的消息中的报文有效载荷使用flatbuffers进行反序列化处理,包括从序列化对象缓存区中读取对应的数据,对应的数据包括报文有效载荷。

s4)订阅者subscriber获取序列化处理后的消息并使用flatbuffers对序列化处理后的消息进行反序列化处理,包括从所述序列化对象缓存中读取对应的数据,对应的数据包括报文有效载荷。

以java为例,在mqtt的报文有效载荷payload实体中使用flatbuffers进行数据序列化和反序列化,按照下面步骤进行:

1)编写schema文件;

2)使用flatbuffers编译器flatc对schema文件进行编译,生成javabean文件,javabean为一种可重用的java组件,包含属性(properties)、方法(methods)、事件(events)等特性。

3)使用maven工具编译flatbuffers的源代码,获得flatbuffers的jar包;

4)使用flatbufferbuilder构造一个序列化对象(bytebuffer),将mqtt的报文有效载荷放入序列化对象缓存区中;

5)对序列化对象缓存区中的数据进行保存或发送;

6)读取存有序列化对象的缓冲区,通过代码getrootasxxx进行反序列化。xxx代表对象名。

如图3所示,纵坐标表示不同类型的数据,横坐标表示处理速度。jackson是一个java的用来处理json格式数据的类库,对于各种不同类型的数据序列化处理速度方面,flatbuffers在序列化和反序列化处理过程均快于json,表明flatbuffers在序列化和反序列化性能上有很大的提高。

通过采用本发明公开的上述技术方案,得到了如下有益的效果:

本发明使用flatbuffers数据协议进行序列化处理以及反序列化,能够降低报文中挟带数据的长度,同时降低数据的序列化以及反序列化成本。

以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1