MQTT消息的处理方法、装置、电子设备及存储介质与流程

文档序号:17158403发布日期:2019-03-20 00:18阅读:288来源:国知局
MQTT消息的处理方法、装置、电子设备及存储介质与流程

本发明涉及通信技术领域,尤其涉及一种mqtt消息的处理方法、装置、电子设备及存储介质。



背景技术:

mqtt(messagequeuingtelemetrytransport,消息队列遥测传输)是ibm开发的一个即时通讯协议。mqtt协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,在移动互联网时代,越来越多的企业都使用mqtt作为手机客户端与服务器端推送消息的协议。

在手机客户端作为控制终端,利用手机中的app(application,应用程序)与其他终端通信的过程中,会收到各种mqtt消息,app需要根据收到的mqtt信息执行相应的业务操作。然而,当app同时收到多条mqtt消息时,app无法有效地区分这些mqtt消息分别对应哪项具体业务,导致手机app的业务状况受到影响,造成业务逻辑错乱。现有的解决方案是,在手机端添加大量冗余的临时规避方案来维持正常的通信。例如,可设置超时处理机制的临时规避方案,假设规定超时时间为10秒,则手机app将发出消息a后10秒内收到的第一条消息作为消息a的反馈消息,超过10秒后处理下一条手机发出的消息,但是,如果手机app在这10秒内收到多条mqtt消息,只会将第一条消息作为消息a的反馈消息进行处理,无论这条消息是否真的是消息a的反馈消息,而其他消息均会被过滤掉,造成业务逻辑错乱。因此,这些冗余的代码逻辑不仅不能从根本上解决问题,还会对app代码后期的维护造成非常大的困扰,甚至产生随机性的bug。



技术实现要素:

本发明实施例提供一种mqtt消息的处理方法、装置、电子设备及存储介质,以解决现有技术中无法有效地区分不同的mqtt消息,导致业务逻辑混乱的问题。

第一方面,本发明一实施例提供了一种mqtt消息的处理方法,包括:

发送第一消息,第一消息中包含消息标识,第一消息为消息队列遥测传输mqtt类型的消息;

存储第一消息的属性数据,属性数据包括第一消息的消息标识以及第一消息对应的回调处理函数,回调处理函数为处理与第一消息匹配的第二消息的操作方式;

接收第二消息,第二消息中包含消息标识,第一消息为mqtt类型的消息;

查找与第二消息有相同消息标识的属性数据,并执行查找到的属性数据中的回调处理函数。

第二方面,本发明一实施例提供了一种mqtt消息的处理装置,包括:

发送模块,用于发送第一消息,第一消息中包含消息标识,第一消息为消息队列遥测传输mqtt类型的消息;

存储模块,用于存储第一消息的属性数据,属性数据包括第一消息的消息标识以及第一消息对应的回调处理函数,回调处理函数为处理与第一消息匹配的第二消息的操作方式;

接收模块,用于接收第二消息,第二消息中包含消息标识,第一消息为mqtt类型的消息;

处理模块,用于查找与第二消息有相同消息标识的属性数据,并执行查找到的属性数据中的回调处理函数。

第三方面,本发明一实施例提供了一种电子设备,包括收发机、存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,收发机用于在处理器的控制下接收和发送数据,处理器执行程序时实现上述任一种方法的步骤。

第四方面,本发明一实施例提供了一种计算机可读存储介质,其上存储有计算机程序指令,该程序指令被处理器执行时实现上述任一种方法的步骤。

本发明实施例提供的技术方案,通过在mqtt消息中增加一个消息标识,来确保mqtt消息的唯一性,利用该消息标识识别被控端的反馈消息对应的原始消息,从而建立了mqtt消息的一一对应机制,因此,不再需要增加冗余的规避措施,使得用户端的业务逻辑更加明确清晰。此外,由于不需要增加冗余的规避措施,因此,减少了业务逻辑的代码量,大大减少了因冗余代码引入的随机性bug,方便后期维护。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所介绍的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的mqtt消息的处理方法的应用场景示意图;

图2为本发明一实施例提供的mqtt消息的处理方法的流程示意图;

图3为本发明一实施例提供的mqtt消息的处理装置的结构示意图;

图4为本发明一实施例提供的电子设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。

在具体实践过程中,本发明的发明人发现,在使用mqtt协议进行通信的环境下,当用户端向被控端发出指令a后,由于用户端可能会同时运行多个业务,此时就有可能同时或在极短的时间内收到多个被控端反馈的针对不同指令的mqtt消息,在这种情况下,由于mqtt消息不具有唯一性,因此,客户端无法准确识别到哪一条mqtt消息对应指令a,造成业务逻辑混乱。

为此,本发明的发明人考虑到,在用户端发送给被控端的第一mqtt消息中增加一个消息标识,并将存储该第一mqtt消息,而相应的被控端在收到该第一mqtt消息后,在反馈给用户端的第二mqtt消息中增加了该消息标识,因此,用户端可通过消息标识识别第二mqtt消息对应的原始消息为第一mqtt消息,从而执行相应的业务操作。通过在mqtt消息中增加一个消息标识,来确保mqtt消息的唯一性,利用该消息标识识别被控端的反馈消息对应的原始消息,从而建立了mqtt消息的一一对应机制,因此,不再需要增加冗余的规避措施,使得用户端的业务逻辑更加明确清晰。

在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。

首先参考图1,其为本发明实施例提供的mqtt消息的处理方法的应用场景示意图,包括用户端11和多个被控端12,用户端11和被控端12之间通过网络进行通信连接,该网络可以为局域网、广域网等,用户端11和多个被控端12之间使用mqtt协议进行通信。用户10可通过用户端11对被控端12进行控制,例如,在智能家居环境中,被控端12可以是家中的智能空调、智能音箱等设备,用户可通过用户端11向被控端12发送控制指令,以控制被控端12工作或调节其各项工作参数。其中,用户端11可以是智能遥控器,也可以是便携设备(例如:手机、平板、笔记本电脑等),用户10通过用户端11中安装的任一包含控制被控端功能的应用程序与被控端12进行交互。

下面结合图1所示的应用场景,对本发明实施例提供的技术方案进行说明。

参考图2,本发明实施例提供一种mqtt消息的处理方法,包括以下步骤:

s201、发送第一消息,第一消息中包含消息标识,第一消息为消息队列遥测传输mqtt类型的消息。

用户端通过用户端向被控端发送第一消息,通过第一消息向被控端传达指令,以达到控制被控端的目的。用户端发送的每一条消息都具有唯一的消息标识。

第一消息的消息标识可以根据生成第一消息时的时间戳确定,以确保消息标识的唯一性。

s202、存储第一消息的属性数据,属性数据包括第一消息的消息标识以及第一消息对应的回调处理函数,回调处理函数为处理与第一消息匹配的第二消息的操作方式。

所有通过用户端发送的消息对应的属性数据都会被存储在用户端中。例如,当用户想要打开空调时,可通过用户端向空调发送包含“打开空调”指令和消息标识a的第一消息a,用户端在发送完第一消息a后,将第一消息a的消息标识a和回调处理函数作为第一消息a的属性数据存储在用户端中。空调在收到第一消息a后,根据其中的“打开空调”指令开启空调,并生成指示空调已经打开的第二消息a’,在第二消息a’中添加消息标识a后,将第二消息a’反馈给用户端。

其中,回调处理函数是根据不同的业务需求预先设定好的。例如,用户端向空调发送第一消息为“打开空调”,后续对应的业务逻辑是在收到空调的回复消息后,向用户展示空调回复的消息,以使用户获知空调是否被打开,则与该第一消息对应的操作方式可以是:用户终端显示第二消息中的内容。因此,用户端在收到空调回复的第二消息后,根据消息标识匹配到第一消息为“打开空调”,则执行该第一消息对应的操作,根据第二消息中的内容向用户展示空调打开的状况,若第二消息中是“空调已打开”,则用户端可显示“空调已打开”,若第二消息中是“空调打开失败”,则用户端可以显示“空调打开失败”。当然,用户端显示的具体内容以及显示的形式可以根据不同的应用需求预先设定,在此不作限定。

此外,还可以根据具体的业务逻辑设置多个不同的回调处理函数,例如,设置空调被成功打开时对应的成功回调函数,空调没有被成功打开时对应的失败回调函数,以根据被控端不同的反馈消息执行不同的操作。成功回调函数对应的操作可以是,用户端显示空调控制界面,使得用户可以进一步调节空调的温度、风速等参数;失败回调函数对应的操作可以是,显示“打开失败,请检查空调”等提示语。

s203、接收第二消息,第二消息中包含消息标识,第一消息为mqtt类型的消息。

s204、查找与第二消息有相同消息标识的属性数据,并执行查找到的属性数据中的回调处理函数。

接上述空调的例子,用户端在收到指示空调已经打开的第二消息a’后,从第二消息a’中提取出消息标识a,在用户端存储的所有属性数据中查询到具有消息标识a的属性数据,从查询到是属性数据中提取对应的回调处理函数,执行回调处理函数对应的业务操作,向用户反馈空调回复的第二消息a’中的内容,此时,如果第二消息a’的内容为“空调已打开”,则用户端可以显示“空调已打开”的消息。

如果用户端还向智能音箱发送了包含“打开音箱”指令和消息标识b的第一消息b,智能音箱打开后,反馈包含指示音箱已打开的第二消息b’,该第二消息b’携带有消息标识b,而该消息b’恰好与消息a’同时到达用户端,用户端通过消息中的消息标识就可以很好地区分消息b’和消息a’,并查找到各自对应的第一消息,从而互不影响地执行各自对应的业务操作。

本实施例的mqtt消息的处理方法,通过在mqtt消息中增加一个消息标识,来确保mqtt消息的唯一性,利用该消息标识识别被控端的反馈消息对应的原始消息,从而建立了mqtt消息的一一对应机制,因此,不再需要增加冗余的规避措施,使得用户端的业务逻辑更加明确清晰。此外,由于不需要增加冗余的规避措施,因此,减少了业务逻辑的代码量,大大减少了因冗余代码引入的随机性bug,方便后期维护。

需要说明的是,本实施例的方案应用在使用mqtt协议的通信网络中,除作出特别说明外,本实施例中所指的消息应理解为mqtt类型的消息。本实施例中的第一消息特指用户端发送给被控端的消息,第二消息特指被控端针对收到的第一消息回复给用户端的反馈消息。

由于网络故障或设备故障,存在用户端无法收到被控端反馈的第二消息的情况。为此,存储的第一消息的属性数据还包括:第一消息对应的存储时刻和超时时长。其中,第一消息的存储时刻是指存储第一消息对应的属性数据的时刻。

属性数据的存储时长为当前时刻与第一消息对应的存储时刻的差值。用户端可根据当前时刻、第一消息的存储时刻以及超时时长确定第一消息的属性数据的存储时长是否超时。如果当前时刻与第一消息的存储时刻的差值大于超时时长,且此刻还没有收到第一消息的反馈消息,则表明该第一消息的属性数据的存储时长已经超时,可能是发生了网络故障或设备故障,这种情况下可以提醒用户。

为此,第一消息的属性数据还可以包括超时回调函数,超时回调函数为当第一消息的属性数据的存储时长超时时执行的操作方式。相应地,本实施例的方法还包括以下步骤:当检测到第一消息的属性数据的存储时长超时时,执行该第一消息的属性数据中的超时回调函数。

具体实施时,设置定时器,在程序初始化时启动定时器,处理mqtt消息过程中,在定时器的控制下轮询判断所有存储在用户端中的属性数据的存储时长是否超时,如果当前时刻与第一消息的存储时刻的差值大于该第一消息对应的超时时长,且截止到当前时刻为止用户端还没有收到与该第一消息有相同消息标识的第二消息,则可以判定该第一消息的属性数据的存储时长已经超时,对于已经超时的情况,用户端可调用该第一消息对应属性数据中的超时回调函数,以应对无法收到被控端反馈消息的情况,例如,可以通过用户端显示“连接超时,请检查网络”等提示语。

用户端可通过消息列表或数据字典(datadictionary)存储第一消息对应的属性数据,以方便管理。

以下为属性数据的数据结构的一个示例:

@interfacemqttcallbackinfo:nsobject

@property(nonatomic,copy)mqttsuccesscallbackblocksuccesscallbackblock;//成功回调处理函数

@property(nonatomic,copy)mqttfailcallbackblockfailcallbackblock;//失败回调处理函数

@property(nonatomic,copy)mqtttimeoutcallbackblocktimeoutcallbackblock;//超时回调处理函数

@property(nonatomic,assign)inttimeouttime;//超时时长

@property(nonatomic,assign)nstimeintervalbegintimeinterval;//存储第一消息的时间戳

@property(nonatomic,copy)nsstring*messageid;//消息标识

@end

用户端在发送第一消息后,按上述数据结构生成第一消息对应的属性数据,并将第一消息对应的属性数据存入数据列表或数据字典中,属性数据具体包括以下内容:消息标识(messageid)、存储第一消息的时间戳(begintimeinterval)、超时时长(timeouttime)、成功回调处理函数、失败回调处理函数以及超时回调处理函数。在用户端收到被控端反馈的第二消息后,提取第二消息中的消息标识,从数据列表或数据字典中匹配到有相同消息标识的属性数据,然后,根据第二消息从匹配到的属性数据中提取出成功回掉函数或失败回调函数,执行据成功回掉函数或失败回调函数中的业务操作。与此同时,用户端不断地轮询数据列表或数据字典中所有的属性数据,根据当前时刻以及属性数据中的第一消息的时间戳(begintimeinterval)、超时时长(timeouttime)判断属性数据的存储时长是否超时,一旦检测到某一属性数据的存储时长超时,则执行该属性数据中的超时回调处理函数。

此外,为了更好地管理存储的第一消息的属性数据,本实施例的mqtt消息的处理方法还包括以下步骤:判断第一消息的属性数据是否满足失效规则,删除满足失效规则的属性数据。其中,失效规则包括:(1)已接收到与第一消息对应的第二消息,(2)第一消息的属性数据的存储时长已经超时。

其中,根据当前时刻以及属性数据中的存储时刻和超时时长确定第一消息的属性数据的存储时长是否超时,即,当当前时刻与属性数据中的存储时刻的差值大于该属性数据的超时时长时,表明该属性数据的存储时长已经超时。

具体实施时,在原有mqtt架构的基础上,新增了mqttcallbackinfomanager类,以实现对所有第一消息的属性数据的管理。mqttcallbackinfomanager类具体执行以下步骤:在程序初始化时,启动定时器,在处理mqtt消息过程中,在定时器的控制下轮询消息列表或数据字典中存储的各个第一消息的属性数据,判断各个第一消息的属性数据是否满足失效规则,判断其中一个第一消息的属性数据是否满足失效规则的方法为:检测是否收到该第一消息对应的第二消息,若收到,则删除该第一消息对应的属性数据,若没有收到,将根据该第一消息对应属性数据中的当前时刻、存储时刻以及超时时长确定第一消息的属性数据的存储时长是否超时,若超时,则删除该第一消息对应的属性数据。

可通过mqttcallbackinfomanager类触发执行超时回调处理函数,即mqttcallbackinfomanager在轮询过程中,一旦检测到某一属性数据的存储时长超时,则执行该属性数据中的超时回调函数。

如图3所示,基于与上述mqtt消息的处理方法相同的发明构思,本发明实施例还提供了一种mqtt消息的处理装置30,包括发送模块301、存储模块302、接收模块303和处理模块304。

发送模块301用于发送第一消息,第一消息中包含消息标识,第一消息为消息队列遥测传输mqtt类型的消息;

存储模块302用于存储第一消息的属性数据,属性数据包括第一消息的消息标识以及第一消息对应的回调处理函数,回调处理函数为处理与第一消息匹配的第二消息的操作方式;

接收模块303用于接收第二消息,第二消息中包含消息标识,第一消息为mqtt类型的消息;

处理模块304用于查找与第二消息有相同消息标识的属性数据,并执行查找到的属性数据中的回调处理函数。

本实施例的mqtt消息的处理装置,通过在mqtt消息中增加一个消息标识,来确保mqtt消息的唯一性,利用该消息标识识别被控端的反馈消息对应的原始消息,从而建立了mqtt消息的一一对应机制,因此,不再需要增加冗余的规避措施,使得用户端的业务逻辑更加明确清晰。此外,由于不需要增加冗余的规避措施,因此,减少了业务逻辑的代码量,大大减少了因冗余代码引入的随机性bug,方便后期维护。

可选地,第一消息的属性数据还包括第一消息对应的存储时刻和超时时长。

相应地,本实施例的mqtt消息的处理装置还包括删除模块,用于判断第一消息的属性数据是否满足失效规则,删除满足失效规则的属性数据。

其中,失效规则包括:已接收到与第一消息对应的第二消息,或,第一消息的属性数据的存储时间已经超时。根据当前时刻、第一消息的存储时刻以及超时时长确定第一消息的属性数据的存储时间是否超时。

可选地,存储模块302具体用于将第一消息的属性数据存储到消息列表或数据字典中。

可选地,删除模块具体用于启动定时器,轮询消息列表或数据字典中存储的各个第一消息的属性数据,判断各个第一消息的属性数据是否满足失效规则。

可选地,第一消息的属性数据还包括超时回调函数,超时回调函数为当第一消息的属性数据的存储时长超时时执行的操作方式。

相应地,本实施例的mqtt消息的处理装置还包括超时处理模块,用于当检测到第一消息的属性数据的存储时长超时时,执行第一消息的属性数据中的超时回调函数。

具体实施时,可通过删除模块来触发超时处理模块,例如,当删除模块检测到某一属性数据的存储时长超时时,触发超时处理模块,以执行该属性数据中的超时回调函数,然后删除该属性数据。

可选地,第一消息的消息标识根据生成第一消息时的时间戳确定。

本发明实施例提的mqtt消息的处理装置与上述mqtt消息的处理方法采用了相同的发明构思,能够取得相同的有益效果,在此不再赘述。

基于与上述mqtt消息的处理方法相同的发明构思,本发明实施例还提供了一种电子设备,该电子设备具体可以为桌面计算机、便携式计算机、智能手机、平板电脑、个人数字助理(personaldigitalassistant,pda)、服务器等。如图4所示,该电子设备40可以包括处理器401、存储器402和收发机403。收发机403用于在处理器401的控制下接收和发送数据。

存储器402可以包括只读存储器(rom)和随机存取存储器(ram),并向处理器提供存储器中存储的程序指令和数据。在本发明实施例中,存储器可以用于存储mqtt消息的处理方法的程序。

处理器401可以是cpu(中央处埋器)、asic(applicationspecificintegratedcircuit,专用集成电路)、fpga(field-programmablegatearray,现场可编程门阵列)或cpld(complexprogrammablelogicdevice,复杂可编程逻辑器件)处理器通过调用存储器存储的程序指令,按照获得的程序指令实现上述任一实施例中的mqtt消息的处理方法。

本发明实施例提供了一种计算机可读存储介质,用于储存为上述电子设备所用的计算机程序指令,其包含用于执行上述mqtt消息的处理方法的程序。

上述计算机存储介质可以是计算机能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(mo)等)、光学存储器(例如cd、dvd、bd、hvd等)、以及半导体存储器(例如rom、eprom、eeprom、非易失性存储器(nandflash)、固态硬盘(ssd))等。

以上所述,以上实施例仅用以对本申请的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明实施例的方法,不应理解为对本发明实施例的限制。本技术领域的技术人员可轻易想到的变化或替换,都应涵盖在本发明实施例的保护范围之内。

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