一种高效可迁移的MQTT Broker订阅树实现方法转让专利

申请号 : CN202011280427.3

文献号 : CN112383629B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 赖俊良

申请人 : 四川长虹电器股份有限公司

摘要 :

本发明涉及MQTT服务端订阅树实现技术,特别涉及一种高效可迁移的MQTT Broker订阅树实现方法,通过数据库持久化存储KEY与客户端Cientid的对应关系,服务端在数据库中搜索主题对应的数组KEY,再通过存储的KEY与客户端Cientid的对应关系,获得客户端集合,实现了在MQTT协议下的订阅、取消订阅和发布,本发明采用数据库,解决了在MQTT协议下迁移困难的问题,采用数组KEY与主题的对应关系解决了占用空间大以及并发困难的问题,本发明一种高效可迁移的MQTT Broker订阅树实现方法应用于MQTT。

权利要求 :

1.一种高效可迁移的MQTT Broker订阅树实现方法,客户端发送的消息包括主题信息和客户端Cientid,所述主题消息是订阅主题信息,其特征在于,包括以下步骤:S101、服务端接收到订阅主题信息,按照约定的分隔符将订阅主题信息拆分,获得拆分后的主题TOKEN数组;

S102、将TOKEN数组中的每个数据分别申请整形的倒排索引,获得索引ID=[ID1,ID2,ID3,…,IDn,n∈N+];

S103、根据索引ID中的元素IDn,在数据库中进行搜索,所述数据库具有持久化的存储功能,若在数据库中搜索到与IDn对应的id,则反馈此元素IDn在数据库中对应的id,定义一个数组KEY,保存与IDn对应的id,建立KEY与客户端Cientid的对应关系,如果KEY与客户端Cientid对应关系已经存在于数据库中,则不保存此对应关系,否则保存此对应关系,若在数据库中搜索不到与IDn对应的id,则申请数据库id并保存KEY与客户端Cientid对应关系,然后反馈此对应id,获得反馈KEY=[id1,id2,id3,…,idn,n∈N+],其中IDn与idn对应,如果索引ID中的元素IDn是通配符,则申请的数据库id是相同的通配符;

S104、当KEY中的元素没有通配符时,服务端在数据库中搜索KEY与客户端Cientid的对应关系找到对应的客户端集合;

S105、当KEY中的元素有通配符时,则建立二级缓存,存储反馈的所有符合含有通配符的KEY数组,得到集合S={KEY1,KEY2,KEY3,…,KEYn,n∈N+},服务端在数据库中搜索KEYn与客户端Clientid的对应关系,获得集合S对应的客户端集合。

2.根据权利要求1所述的一种高效可迁移的MQTT Broker订阅树实现方法,其特征在于,所述约定的分隔符包括符号“/”;所述数据库包括Mysql数据库或Redis数据库;所述id是数字;所述二级缓存采用SET数据结构。

3.根据权利要求1所述的一种高效可迁移的MQTT Broker订阅树实现方法,其特征在于,所述索引ID=[ID1,ID2,ID3,…,IDn,n∈N+],其中n为订阅深度,作为额外的索引进行搜索。

4.一种高效可迁移的MQTT Broker订阅树实现方法,客户端发送的消息包括主题信息和客户端Cientid,所述主题消息是取消订阅主题信息,其特征在于,包括以下步骤:S201、服务端接收到取消订阅主题信息,按照约定的分隔符将取消订阅主题信息拆分,获得拆分后的主题TOKEN数组;

S202、将TOKEN数组中的每个数据分别申请整形的倒排索引,获得索引ID=[ID1,ID2,ID3,…,IDn,n∈N+];

S203、根据索引ID中的元素IDn,在数据库中进行搜索,所述数据库具有持久化的存储功能,若在数据库中搜索到与IDn对应的id,则反馈此元素在数据库中对应的id,定义一个数组KEY,保存与IDn对应的id,获得反馈KEY=[id1,id2,id3,…,idn,n∈N+],其中IDn与idn对应,若在数据库中搜索不到与IDn对应的id,则结束;

S204、如果反馈KEY中的元素没有通配符,则直接删除KEY与客户端Clientid的对应关系;

S205、如果反馈KEY中的元素有通配符,则建立二级缓存,存储反馈的所有符合含有通配符的KEY数组,得到集合S={KEY1,KEY2,KEY3,…,KEYn,n∈N+},删除集合S中的所有KEY与客户端Cientid的对应关系。

5.根据权利要求4所述的一种高效可迁移的MQTT Broker订阅树实现方法,其特征在于,所述约定的分隔符包括符号“/”;所述数据库包括Mysql数据库或Redis数据库;所述id是数字;所述二级缓存采用SET数据结构。

6.根据权利要求4所述的一种高效可迁移的MQTT Broker订阅树实现方法,其特征在于,所述索引ID=[ID1,ID2,ID3,…,IDn,n∈N+],其中n为订阅深度,作为额外的索引进行搜索。

7.一种高效可迁移的MQTT Broker订阅树实现方法,客户端发送的消息包括主题信息和客户端Cientid,所述主题消息是发布主题信息,其特征在于,包括以下步骤:S301、服务端接收到发布主题信息,按照约定的分隔符将发布主题信息拆分,获得拆分后的主题TOKEN数组;

S302、将TOKEN数组中的每个数据分别申请整形的倒排索引,获得索引ID=[ID1,ID2,ID3,…,IDn,n∈N+];

S303、根据索引ID中的元素IDn,在数据库中进行搜索,所述数据库具有持久化的存储功能,若在数据库中搜索到与IDn对应的id,则反馈此元素在数据库中对应的id,定义一个数组KEY,保存与IDn对应的id,获得反馈KEY=[id1,id2,id3,…,idn,n∈N+],其中IDn与idn对应;

S304、如果KEY中不含有通配符,服务端在数据库中搜索KEY与客户端Cientid的对应关系找到KEY对应的客户端集合,向此客户端集合中的所有客户端发布信息;

S305、如果KEY中含有通配符,则建立二级缓存,存储反馈的所有符合含有通配符的KEY数组,得到集合S={KEY1,KEY2,KEY3,…,KEYn,n∈N+},服务端在数据库中搜索KEY与客户端Cientid的对应关系找到集合S对应的客户端集合,向此客户端集合中的所有客户端发布信息。

8.根据权利要求7所述的一种高效可迁移的MQTT Broker订阅树实现方法,其特征在于,所述约定的分隔符包括符号“/”;所述数据库包括Mysql数据库或Redis数据库;所述id是数字;所述二级缓存采用SET数据结构。

9.根据权利要求7所述的一种高效可迁移的MQTT Broker订阅树实现方法,其特征在于,所述索引ID=[ID1,ID2,ID3,…,IDn,n∈N+],其中n为订阅深度,作为额外的索引进行搜索。

说明书 :

一种高效可迁移的MQTT Broker订阅树实现方法

技术领域

[0001] 本发明涉及MQTT服务端订阅树实现技术,特别涉及一种高效可迁移的MQTT Broker订阅树实现方法。

背景技术

[0002] MQTT协议约定了终端通过发布订阅的模式来进行消息传递,通过主题来限定发布以及订阅的终端,客户端发送的消息包括主题信息和客户端Cientid,其中主题消息包括订
阅主题信息、取消订阅主题消息、发布订阅消息。订阅树的节点存储了订阅该路径节点的终
端信息。在现有模式下,基于内存结构以及直接使用字符串作为节点存储,占用空间大;一
个主题可以包括多个客户端,多个客户端操作的时候需要加锁,需要等客户端1操作完了,
客户端2才能操作,并发控制困难,造成订阅树效率低下;不具有持久化存储的特点,造成订
阅树效率低下以及造迁移困难的问题。

发明内容

[0003] 本发明所解决的技术问题:本发明提供一种高效可迁移的MQTT Broker订阅树实现方法解决在MQTT协议下订阅树效率低下、占用空间大以及迁移困难的问题。
[0004] 本发明解决上述技术问题采用的技术方案:一种高效可迁移的MQTT Broker订阅树实现方法,当主题消息是订阅主题信息时,包括以下步骤:
[0005] S101、服务端接收到订阅主题信息,按照约定的分隔符将订阅主题信息拆分,获得拆分后的主题TOKEN数组;
[0006] S102、将TOKEN数组中的每个数据分别申请整形的倒排索引,获得索引ID=[ID1,ID2,ID3,…,IDn,n∈N+];
[0007] S103、根据索引ID中的元素IDn,在数据库中进行搜索,所述数据库具有持久化的存储功能,若在数据库中搜索到与IDn对应的id,则反馈此元素IDn在数据库中对应的id,定
义一个数组KEY,保存与IDn对应的id,建立KEY与客户端Cientid的对应关系,如果KEY与客
户端Cientid对应关系已经存在于数据库中,则不保存此对应关系,否则保存此对应关系,
若在数据库中搜索不到与IDn对应的id,则申请数据库id并保存KEY与客户端Cientid对应
关系,然后反馈此对应id,获得反馈KEY=[id1,id2,id3,…,idn,n∈N+],其中IDn与idn对
应,如果索引ID中的元素IDn是通配符,则申请的数据库id是相同的通配符;
[0008] S104、当KEY中的元素没有通配符时,服务端在数据库中搜索KEY与客户端Cientid的对应关系找到对应的客户端集合;
[0009] S105、当KEY中的元素有通配符时,则建立二级缓存,存储反馈的所有符合含有通配符的KEY数组,得到集合S={KEY1,KEY2,KEY3,…,KEYn,n∈N+},服务端在数据库中搜索
KEYn与客户端Clientid的对应关系,获得集合S对应的客户端集合。
[0010] 进一步的,当主题消息是取消订阅主题信息时,其特征在于,包括以下步骤:
[0011] S201、服务端接收到取消订阅主题信息,按照约定的分隔符将取消订阅主题信息拆分,获得拆分后的主题TOKEN数组;
[0012] S202、将TOKEN数组中的每个数据分别申请整形的倒排索引,获得索引ID=[ID1,ID2,ID3,…,IDn,n∈N+];
[0013] S203、根据索引ID中的元素IDn,在数据库中进行搜索,所述数据库具有持久化的存储功能,若在数据库中搜索到与IDn对应的id,则反馈此元素在数据库中对应的id,定义
一个数组KEY,保存与IDn对应的id,获得反馈KEY=[id1,id2,id3,…,idn,n∈N+],其中IDn
与idn对应,若在数据库中搜索不到与IDn对应的id,则结束;
[0014] S204、如果反馈KEY中的元素没有通配符,则直接删除KEY与客户端Clientid的对应关系;
[0015] S205、如果反馈KEY中的元素有通配符,则建立二级缓存,存储反馈的所有符合含有通配符的KEY数组,得到集合S={KEY1,KEY2,KEY3,…,KEYn,n∈N+},删除集合S中的所有
KEY与客户端Cientid的对应关系。
[0016] 进一步的,当主题消息是发布主题信息时,其特征在于,包括以下步骤:
[0017] S301、服务端接收到发布主题信息,按照约定的分隔符将发布主题信息拆分,获得拆分后的主题TOKEN数组;
[0018] S302、将TOKEN数组中的每个数据分别申请整形的倒排索引,获得索引ID=[ID1,ID2,ID3,…,IDn,n∈N+];
[0019] S303、根据索引ID中的元素IDn,在数据库中进行搜索,所述数据库具有持久化的存储功能,若在数据库中搜索到与IDn对应的id,则反馈此元素在数据库中对应的id,定义
一个数组KEY,保存与IDn对应的id,获得反馈KEY=[id1,id2,id3,…,idn,n∈N+],其中IDn
与idn对应;
[0020] S304、如果KEY中不含有通配符,服务端在数据库中搜索KEY与客户端Cientid的对应关系找到KEY对应的客户端集合,向此客户端集合中的所有客户端发布信息;
[0021] S305、如果KEY中含有通配符,则建立二级缓存,存储反馈的所有符合含有通配符的KEY数组,得到集合S={KEY1,KEY2,KEY3,…,KEYn,n∈N+},服务端在数据库中搜索KEY与
客户端Cientid的对应关系找到集合S对应的客户端集合,向此客户端集合中的所有客户端
发布信息。
[0022] 进一步的,所述约定的分隔符包括符号“/”。
[0023] 进一步的,索引ID=[ID1,ID2,ID3,…,IDn,n∈N+],其中n为订阅深度,作为额外的索引进行搜索。
[0024] 进一步的,所述数据库包括Mysql数据库或Redis数据库。
[0025] 进一步的,所述id是数字。
[0026] 进一步的,二级缓存采用SET数据结构。
[0027] 本发明的有益效果:本发明一种高效可迁移的MQTT Broker订阅树实现方法通过数据库持久化存储KEY与客户端Cientid的对应关系,在数据库中搜索主题对应的数组KEY,
再通过存储的KEY与客户端Cientid的对应关系,获得客户端集合,实现了在MQTT协议下的
消息传递,本发明采用数据库,解决了在MQTT协议下迁移困难的问题,采用数组KEY与主题
的对应关系解决了占用空间大以及并发困难的问题。

附图说明

[0028] 图1是本发明一种高效可迁移的MQTT Broker订阅树实现方法的订阅主题步骤。
[0029] 图2是本发明一种高效可迁移的MQTT Broker订阅树实现方法的取下订阅主题步骤。
[0030] 图3是本发明一种高效可迁移的MQTT Broker订阅树实现方法的发布主题步骤。

具体实施方式

[0031] 如附图1所示,服务端接收订阅主题信息,按照约定的分隔符拆分主题,获得TOKEN数组ID,然后在数据库中搜索ID的元素IDn对应的idn,如果没有搜索到,则申请新的id,获
得由idn组成的数组KEY,下一步,存储KEY与客户端Cientid的对应关系,下一步,判断KEY中
是否含有通配符,如果KEY中不含有通配符,则通过KEY找到对应的客户端集合,如果KEY中
含有通配符,则建立二级缓冲,存储符合含有通配符的KEY的集合,然后通过KEY找到集合S
对应的客户端集合。
[0032] 具体的,服务端接收到客户端发送的订阅主题信息,按照约定的分隔符“/”将订阅主题信息拆分,获得拆分后的主题TOKEN数组,将TOKEN数组中的每个数据分别申请整形的
倒排索引,获得索引ID=[ID1,ID2,ID3,…,IDn,n∈N+],根据索引ID中的元素IDn,在数据
库中搜索,若在数据库中搜索到与IDn对应的id,则反馈此元素IDn在数据库中对应的id,建
立KEY与客户端Cientid的对应关系,如果KEY与客户端Cientid对应关系已经存在于数据库
中,则不保存此对应关系,否则保存此对应关系,若在数据库中搜索不到与IDn对应的id,则
申请数据库id并保存KEY与客户端Cientid对应关系,然后反馈此对应id,获得反馈KEY=
[id1,id2,id3,…,idn,n∈N+],其中IDn与idn对应,如果索引ID中的元素IDn是通配符,则
申请的数据库id是相同的通配符,如果反馈KEY中的元素有通配符,则建立二级缓存,存储
反馈的所有符合含有通配符的KEY数组,得到集合S={KEY1,KEY2,KEY3,…,KEYn,n∈N+},
服务端通过搜索保存的KEY与客户端Cientid获得集合S对应的客户端集合,如果反馈的KEY
中的元素没有通配符,服务端通过搜索保存的KEY与客户端Cientid获得此反馈KEY对应的
客户端集合。
[0033] 如附图2所示,服务端接收到客户端发送的取消订阅主题信息,按照约定的分隔符拆分主题,获得TOKEN数组ID,然后在数据库中搜索ID的元素IDn对应的idn,如果没有搜索
到,则结束,如果搜索到,获得由idn组成的数组KEY,下一步,判断KEY中是否含有通配符,如
果KEY中含有通配符,则建立二级缓冲,存储符合含有通配符的KEY的集合,然后通过KEY找
到集合S对应的客户端集合,删除集合S中所有KEY与客户端Clientid的对应关系,如果KEY
中不含有通配符,则通过KEY找到对应的客户端集合,删除KEY与客户端Clientid的对应关
系。
[0034] 具体的,服务端接收到取消订阅主题信息,按照约定的分隔符“/”将取消订阅主题信息拆分,获得拆分后的主题TOKEN数组;将TOKEN数组中的每个数据分别申请整形的倒排
索引,获得索引ID=[ID1,ID2,ID3,…,IDn,n∈N+],根据索引ID中的元素IDn,在数据库中
进行搜索,若在数据库中搜索到与IDn对应的id,则反馈此元素在数据库中对应的id,获得
反馈KEY=[id1,id2,id3,…,idn,n∈N+],其中IDn与idn对应,若数据库中不存在与IDn对
应的id,则结束,下一步,如果反馈KEY中的元素没有通配符,则直接删除KEY与客户端
Clientid的对应关系,如果反馈KEY中的元素有通配符,则建立二级缓存,存储反馈的所有
符合含有通配符的KEY数组,得到集合S={KEY1,KEY2,KEY3,…,KEYn,n∈N+},删除集合S中
的所有KEY与客户端Cientid的对应关系。
[0035] 如附图3所示,服务端接收到客户端发送的发布订阅主题信息,按照约定的分隔符拆分主题,获得TOKEN数组ID,然后在数据库中搜索ID的元素IDn对应的idn,获得由idn组成
的数组KEY,下一步,判断KEY中是否含有通配符,如果KEY中含有通配符,则建立二级缓冲,
存储符合含有通配符的KEY的集合S,然后根据KEY与客户端Clientid的对应关系,找到集合
S对应的客户端集合,如果KEY中不含有通配符,则根据KEY与客户端Clientid的对应关系找
到KEY对应的客户端集合。
[0036] 具体的,服务端接收到发布主题信息,按照约定的分隔符“/”将发布主题信息拆分,获得拆分后的主题TOKEN数组,将TOKEN数组中的每个数据分别申请整形的倒排索引,获
得索引ID=[ID1,ID2,ID3,…,IDn,n∈N+],根据索引ID中的元素IDn,在数据库中进行搜
索,若在数据库中搜索到与IDn对应的id,则反馈此元素在数据库中对应的id,获得反馈KEY
=[id1,id2,id3,…,idn,n∈N+],其中IDn与idn对应;下一步,如果KEY中不含有通配符,服
务端在数据库中搜索KEY与客户端Cientid的对应关系找到KEY对应的客户端集合,向此客
户端集合中的所有客户端发布信息,如果KEY中含有通配符,则建立二级缓存,存储反馈的
所有符合含有通配符的KEY数组,得到集合S={KEY1,KEY2,KEY3,…,KEYn,n∈N+},服务端
在数据库中搜索KEY与客户端Cientid的对应关系找到集合S对应的客户端集合,向此客户
端集合中的所有客户端发布信息。
[0037] 进一步的,索引ID=[ID1,ID2,ID3,…,IDn,n∈N+]中的n为订阅深度,作为在数据库中搜索KEY的额外索引,具体的,先搜索出订阅深度相同的所有KEY组成一个集合,再在此
集合中搜索具体的KEY。
[0038] 具体的,数据库使用Mysql数据库或Redis数据库,二级缓存采用SET数据结构。