CN110557423B - 一种消息推送方法及系统 - Google Patents
一种消息推送方法及系统 Download PDFInfo
- Publication number
- CN110557423B CN110557423B CN201810561163.5A CN201810561163A CN110557423B CN 110557423 B CN110557423 B CN 110557423B CN 201810561163 A CN201810561163 A CN 201810561163A CN 110557423 B CN110557423 B CN 110557423B
- Authority
- CN
- China
- Prior art keywords
- subscription
- client
- tree
- message
- theme
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/55—Push-based network services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种消息推送方法及系统。该方法包括以下步骤:基于MQTT协议与客户端建立通信连接;接收客户端订阅的主题;解析主题,确定主题与订阅该主题的客户端之间的订阅关系;将订阅关系存储到Redis数据库内共享的订阅关系树中;获取消息,从订阅关系树中获取与消息的主题相对应的订阅关系,依据订阅关系将消息的有效载荷推送至相应的客户端。采用Redis数据库将客户端的会话信息、订阅关系进行持久化存储,保证了MQTT连接中消息发送、会话和订阅关系的安全、可靠、持久;并且利用Redis数据库低延时、低消耗和高响应的特性,保证了消息集群分布式共享的处理效率。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种消息推送方法及系统。
背景技术
随着互联网及云计算的发展和普及,越来越多的企业把服务部署在云端。而随着企业服务的扩展,单节点服务器远不能满足需求。首选便是分布式,即消息在服务器集群之间共享,节点服务器之间的通信成为新的问题,也即如何保证消息在节点服务器之间高可靠、一致性消费以及快速的响应。
现有的服务器集群之间的共享数据多采用MYSQL关系型数据库进行存储;关系型数据库是通过外键关联来建立表与表之间的关系,消息响应速度慢,无法满足某些高响应的IOT(物联网)场景。
发明内容
针对现有技术的不足,本发明提出了一种消息推送方法及系统,该方法及系统采用Redis非关系型数据库将客户端的会话信息、订阅关系进行持久化存储,以保证保证消息在服务器集群节点之间高可靠、一致性消费以及快速的响应。
为了实现上述目的,本发明技术方案如下:
一种消息推送方法,包括以下步骤:基于MQTT协议与客户端建立通信连接;接收客户端订阅的主题;解析主题,确定主题与订阅该主题的客户端之间的订阅关系;将订阅关系存储到Redis数据库内共享的订阅关系树中;获取消息,从订阅关系树中获取与消息的主题相对应的订阅关系,依据订阅关系将消息的有效载荷推送至相应的客户端。
进一步地,订阅关系树包含了订阅主题树、订阅客户端树。订阅主题树依据主题的层级结构建立,以被订阅的主题为VALUE的数据结构。订阅客户端树是以订阅主题树中的VALUE为KEY的数据结构,订阅客户端树中的KEY的VALUE为订阅该KEY的客户端的id。
进一步地,订阅主题树中的VALUE以该VALUE的上一级的主题为KEY。
进一步地,所述将订阅关系存储到Redis数据库内共享的订阅关系树中的步骤包含:判断该主题是否已是订阅主题树中的VALUE;若为是,则查找订阅客户端树中与该主题相对应的KEY;若为否,则将该主题设置为订阅主题树中的VALUE,并将该主题设置为订阅客户端树中的KEY;将订阅该主题的客户端id记为订阅客户端树中相对应的KEY的VALUE。
进一步地,所述从订阅关系树中获取与消息的主题相对应的订阅关系,依据订阅关系将消息的有效载荷推送至相应的客户端的步骤包含:
查询订阅主题树,从订阅主题树中找到与消息相对应的VALUE;以该VALUE作为订阅客户端树的KEY,查找该KEY在订阅客户端树中的所有VALUE;判断该KEY在订阅客户端树中的所有VALUE中是否存在本地的客户端id;若为是,则依据所述的本地的客户端id将消息的有效载荷推送至相应的客户端。
进一步地,还包括以下步骤:将与客户端之间的会话信息存储到Redis数据库中。
进一步地,还包括以下步骤:推送客户端发布的消息。
一种消息推送方法,包括以下步骤:与客户端建立通信连接。将与客户端之间的会话信息存储到非关系型数据库中。接收客户端发出的消息订阅请求。解析消息订阅请求,确定消息与订阅该消息的客户端之间的订阅关系。将订阅关系存储到非关系型数据库内共享的订阅关系树中。获取消息,并从订阅关系树中获取与该消息相对应的订阅关系,依据订阅关系将消息推送至相应的客户端。
一种消息推送系统,包括Redis数据库、若干节点服务器。节点服务器基于MQTT协议与客户端建立通信连接。并且,节点服务器接收客户端订阅的主题。节点服务器解析主题,确定主题与订阅该主题的客户端之间的订阅关系。节点服务器将订阅关系存储到Redis数据库内共享的订阅关系树中。节点服务器获取消息,并从订阅关系树中获取与消息的主题相对应的订阅关系,依据订阅关系将消息的有效载荷推送至相应的客户端。
进一步地,还包括消息队列。节点服务器推送客户端发布的消息至消息队列中。节点服务器从消息队列中获取消息。节点服务器将与客户端之间的会话信息存储到Redis数据库中。订阅关系树包含了订阅主题树、订阅客户端树。订阅主题树依据主题的层级结构建立,以被订阅的主题为VALUE的数据结构。订阅客户端树是以订阅主题树中的VALUE为KEY的数据结构,订阅客户端树中的KEY的VALUE为订阅该KEY的客户端的id。
本发明的有益效果:
(1)该方法或系统采用Redis非关系型数据库将客户端的会话信息、订阅关系进行持久化存储,保证了MQTT连接中消息发送、会话和订阅关系的安全、可靠、持久;各节点服务器共享Redis数据库内的信息,实现消息在各个节点服务器上共享和一致性消费,提高了系统的负载能力,并且利用Redis数据库低延时、低消耗和高响应的特性,保证了消息集群分布式共享的处理效率。
(2)该方法或系统利用订阅关系树对订阅关系实现简单、有效、可靠的持久存储,实现消息集群分布式共享。在Redis数据库中建立多级订阅主题的树结构,通过KEY-VALUE存储格式可以很容易的实现多节点的快速读、写响应。
附图说明
图1为本发明的消息推送方法的流程示意图。
图2为本发明的消息推送系统的结构框图。
图3为本发明的订阅关系树的原理示意图。
具体实施方式
下面结合附图和实施例,进一步阐述本发明。
实施例1:
一种消息推送方法,包括以下步骤:
S1:与客户端建立通信连接。
S2:将与客户端之间的会话信息存储到非关系型数据库中。
S3:推送客户端发布的消息。
S4:接收客户端发出的消息订阅请求。
S5:解析消息订阅请求,确定消息与订阅该消息的客户端之间的订阅关系。
S6:将订阅关系存储到非关系型数据库内共享的订阅关系树中。
S7:获取消息,并从订阅关系树中获取与该消息相对应的订阅关系,依据订阅关系将消息推送至相应的客户端。
在一个具体实施例中,如图1所示,该消息推送方法,包括以下步骤:
S11:基于MQTT协议与客户端建立通信连接。
S12:将与客户端之间的会话信息存储到Redis数据库中。
S13:推送客户端发布的消息至消息队列(MQ)中。
S14:接收客户端订阅的主题(topic)。
S15:解析客户端订阅的主题,确定主题与订阅该主题的客户端之间的订阅关系。
S16:将订阅关系存储到Redis数据库内共享的订阅关系树中。
S17:从消息队列中获取消息,并从订阅关系树中获取与消息的主题相对应的订阅关系,依据订阅关系将消息的有效载荷(payload)推送至相应的客户端。
在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)服务器、订阅者。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。本实施例中的节点服务器即为代理(Broker)服务器。
MQTT传输的消息包括主题(Topic)和有效载荷(payload)两部分:(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容;(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
客户端连接节点服务器时,节点服务器记录该会话信息,包括该客户端连接的ip,user,以及所连接的节点服务器id等。利用客户端连接的ip可以建立用户白名单或黑名单,管理用户的使用权限。
本发明采用Redis非关系型数据库将客户端的会话信息、订阅关系进行持久化存储,保证了MQTT连接中消息发送、会话和订阅关系的安全、可靠、持久;各节点服务器共享Redis数据库内的信息,实现消息在各个节点服务器上共享和一致性消费,提高了系统的负载能力,并且利用Redis数据库低延时、低消耗和高响应的特性,保证了消息集群分布式共享的处理效率。
依据订阅关系可以知道订阅客户端与所订阅的消息之间的联系,节点服务器解析客户端订阅的主题,获取该订阅该主题的客户端的id,从而确定了主题与订阅该主题的客户端之间的订阅关系。客户端的id是客户端的唯一标识。
订阅关系树包含了订阅主题树、订阅客户端树。订阅主题树依据主题的层级结构建立,以被订阅的主题为VALUE的数据结构,订阅主题树的每个节点存储一个被订阅的主题;订阅主题树中的VALUE以该VALUE的上一级的主题为KEY。订阅客户端树是以订阅主题树中的VALUE为KEY的数据结构,订阅客户端树中的KEY的VALUE为订阅该KEY的客户端的id。
也就是说,订阅主题树内的VALUE与订阅客户端树内的KEY一一对应,订阅主题树中存储了订阅客户端树中的KEY。订阅主题树中,父节点处的主题是子节点处的主题的KEY,子节点处的主题是父节点处的主题的VALUE。
这样,依据订阅主题树可以获取被订阅消息的主题,依据订阅客户端树可以知道消息被哪些客户端所订阅。
具体地,步骤S16包含以下步骤:
S161:判断该主题是否已是订阅主题树中的VALUE;若为是,则执行S162;若为否,则执行S163。
S162:查找订阅客户端树中与该主题相对应的KEY,执行S164。
S163:将该主题设置为订阅主题树中的VALUE,并将该主题设置为订阅客户端树中的KEY,执行S164;该VALUE在订阅主题树中相应的KEY下设置,如果订阅主题树中不存在相应的KEY,则先建立其相应的KEY。
S164:将订阅该主题的客户端id记为订阅客户端树中相对应的KEY的VALUE。
具体地,步骤S17包含以下步骤:
S171:查询订阅主题树,从订阅主题树中找到与消息相对应的VALUE。
S172:以该VALUE作为订阅客户端树的KEY,查找该KEY在订阅客户端树中的所有VALUE。
S173:判断该KEY在订阅客户端树中的所有VALUE中是否存在本地的客户端id;若为是,则执行S174;若为否,则执行S175。
S174:依据所述的本地的客户端id将消息的有效载荷推送至相应的客户端。
S175:结束。
节点服务器接收到订阅的消息后,查询订阅主题树,从中找到与消息相对应的VALUE,并以该VALUE作为订阅客户端树的KEY,找到该KEY在订阅客户端树中的VALUE即是订阅该消息的客户端id。节点服务器确定订阅客户端树中的VALUE含有连接到自身的订阅客户端id,就会依据id将该订阅的消息推送给相应的订阅客户端。对于当前离线的订阅客户端,节点服务器会记录到离线队列,待该订阅客户端上线后,再将相应的消息推送给该订阅客户端。
如图3所示,为订阅关系树的原理示意图,其订阅主题树中的各节点上的A、B、C、D、E分别表示被订阅的主题,主题A为主题B、C的上级主题,也是主题B、C的KEY,主题B、C为主题A的VALUE,以主题A为KEY可以寻找到其下级主题B、C;同理,主题B为主题D、E的KEY,主题D、E为主题B的VALUE。并且,订阅主题树中各节点上的主题A、B、C、D、E分别为订阅客户端树中相应的节点的KEY,依据该KEY便可以找到订阅客户端树中相应节点上的VALUE。例如,首先确定某订阅消息的主题为订阅主题树中的主题B,然后以该主题B为KEY,可以找到订阅客户端树中该KEY所对应的VALUE,即b1、c2,该b1、c2表示为订阅主题B的两个订阅客户端id,然后由相应的节点服务器将主题B对应的消息分别推送给b1、c2所表示的订阅客户端即可(图中a、b、c表示系统集群中不同节点上的节点服务器,b1、b2分别表示节点服务器b上的两个订阅客户端)。也可以以主题B为KEY,找到该KEY在订阅主题树中的VALUE,即两个下级主题D、E,然后分别以该主题D、E为KEY,找到订阅客户端树中各KEY所对应的VALUE,也就确定了主题D、E所对应的所有订阅客户端id。需要理解的是,下级主题被订阅了,其上一级的主题也相当于被订阅了,例如订阅主题树中的主题D被订阅了,则主题A、B无论是否有相应的订阅客户端,都相当于被订阅了。
某一主题可能会被不同的节点服务器上的不同客户端订阅,某一客户端也可能订阅多个不同的主题,订阅关系树对这些信息可以做到简单、有效、可靠的持久存储,实现消息集群分布式共享。在Redis数据库中建立多级订阅主题的树结构,通过KEY-VALUE存储格式可以很容易的实现多节点的快速读、写响应。
例如,把tn:p2p作为KEY,其VALUE为tn:p2p/device/;同理把tn:p2p/device作为KEY,其VALUE为tn:p2p/device/uuid123,这样就可以依据多级的订阅主题建立订阅主题树结构;同时会在KEY为cli:p2p/device/uuid123下存储订阅该主题的客户端的id。那么比如订阅topic:p2p/device/+的消息时,MQTT的协议内容会向订阅p2p/device/X级别所有的topic发消息;节点服务器会先查找tn:p2p/device下的所有VALUE值,并分别根据各VALUE值查找cli:下所有的相对应的KEY,对其下所有VALUE值所代表的订阅客户端推送相应的消息。例如,tn:p2p/device下的VALUE有tn:p2p/device/uuid123,tn:p2p/device/uuid1234;那么订阅客户端的KEY为cli:p2p/device/uuid123,cli:p2p/device/uuid1234,获取该KEY下相应订阅客户端的id并做相应的消息推送。
实施例2:
一种消息推送系统,包括Redis数据库、若干节点服务器。
节点服务器与客户端建立通信连接。
节点服务器将与客户端之间的会话信息存储到非关系型数据库中。
节点服务器推送客户端发布的消息。
并且,节点服务器接收客户端发出的消息订阅请求。
节点服务器解析消息订阅请求,确定消息与订阅该消息的客户端之间的订阅关系。
节点服务器将订阅关系存储到非关系型数据库内共享的订阅关系树中。
节点服务器获取消息,并从订阅关系树中获取与该消息相对应的订阅关系,依据订阅关系将消息推送至相应的客户端。
在一个具体实施例中,如图2所示,该消息推送系统,包括Redis数据库、消息队列(MQ)、若干节点服务器。
节点服务器基于MQTT协议与客户端建立通信连接。
节点服务器将与客户端之间的会话信息存储到Redis数据库中。
节点服务器推送客户端发布的消息至消息队列中。
并且,节点服务器接收客户端订阅的主题(topic)。
节点服务器解析客户端订阅的主题,确定主题与订阅该主题的客户端之间的订阅关系。
节点服务器将订阅关系存储到Redis数据库内共享的订阅关系树中。
节点服务器从消息队列中获取消息,并从订阅关系树中获取与消息的主题相对应的订阅关系,依据订阅关系将消息的有效载荷(payload)推送至相应的客户端。
在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)服务器、订阅者。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。本实施例中的节点服务器即为代理(Broker)服务器。
MQTT传输的消息包括主题(Topic)和有效载荷(payload)两部分:(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容;(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
客户端连接节点服务器时,节点服务器记录该会话信息,包括该客户端连接的ip,user,以及所连接的节点服务器id等。利用客户端连接的ip可以建立用户白名单或黑名单,管理用户的使用权限。
本发明采用Redis非关系型数据库将客户端的会话信息、订阅关系进行持久化存储,保证了MQTT连接中消息发送、会话和订阅关系的安全、可靠、持久;各节点服务器共享Redis数据库内的信息,实现消息在各个节点服务器上共享和一致性消费,提高了系统的负载能力,并且利用Redis数据库低延时、低消耗和高响应的特性,保证了消息集群分布式共享的处理效率。
依据订阅关系可以知道订阅客户端与所订阅的消息之间的联系,节点服务器解析客户端订阅的主题,获取该订阅该主题的客户端的id,从而确定了主题与订阅该主题的客户端之间的订阅关系。客户端的id是客户端的唯一标识。
订阅关系树包含了订阅主题树、订阅客户端树。订阅主题树依据主题的层级结构建立,以被订阅的主题为VALUE的数据结构,订阅主题树的每个节点存储一个被订阅的主题;订阅主题树中的VALUE以该VALUE的上一级的主题为KEY。订阅客户端树是以订阅主题树中的VALUE为KEY的数据结构,订阅客户端树中KEY的VALUE为订阅该KEY的客户端的id。
也就是说,订阅主题树内的VALUE与订阅客户端树内的KEY一一对应,订阅主题树中存储了订阅客户端树中的KEY。订阅主题树中,父节点处的主题是子节点处的主题的KEY,子节点处的主题是父节点处的主题的VALUE。
这样,依据订阅主题树可以获取被订阅消息的主题,依据订阅客户端树可以知道消息被哪些客户端所订阅。
节点服务器接收到客户端订阅的主题后,首先判断该主题是否已是订阅主题树中的VALUE;若为是,则查找订阅客户端树中与该主题相对应的KEY,并将订阅该主题的客户端id记为订阅客户端树中相对应的KEY的VALUE;该VALUE在订阅主题树中相应的KEY下设置,如果订阅主题树中不存在相应的KEY,则先建立其相应的KEY;若为否,则将该主题设置为订阅主题树中的VALUE,并将该主题设置为订阅客户端树中的KEY,将订阅该主题的客户端id记为订阅客户端树中相对应的KEY的VALUE。
节点服务器接收到订阅的消息后,查询订阅主题树,从中找到与消息相对应的VALUE,并以该VALUE作为订阅客户端树的KEY,找到该KEY在订阅客户端树中的VALUE即是订阅该消息的客户端id。节点服务器确定订阅客户端树中的VALUE含有连接到自身的订阅客户端id,就会依据id将该订阅的消息推送给相应的订阅客户端。对于当前离线的订阅客户端,节点服务器会记录到离线队列,待该订阅客户端上线后,再将相应的消息推送给该订阅客户端。
如图3所示,为订阅关系树的原理示意图,其订阅主题树中的各节点上的A、B、C、D、E分别表示被订阅的主题,主题A为主题B、C的上级主题,也是主题B、C的KEY,主题B、C为主题A的VALUE,以主题A为KEY可以寻找到其下级主题B、C;同理,主题B为主题D、E的KEY,主题D、E为主题B的VALUE。并且,订阅主题树中各节点上的主题A、B、C、D、E分别为订阅客户端树中相应的节点的KEY,依据该KEY便可以找到订阅客户端树中相应节点上的VALUE。例如,首先确定某订阅消息的主题为订阅主题树中的主题B,然后以该主题B为KEY,可以找到订阅客户端树中该KEY所对应的VALUE,即b1、c2,该b1、c2表示为订阅主题B的两个订阅客户端id,然后由相应的节点服务器将主题B对应的消息分别推送给b1、c2所表示的订阅客户端即可(图中a、b、c表示系统集群中不同节点上的节点服务器,b1、b2分别表示节点服务器b上的两个订阅客户端)。也可以以主题B为KEY,找到该KEY在订阅主题树中的VALUE,即两个下级主题D、E,然后分别以该主题D、E为KEY,找到订阅客户端树中各KEY所对应的VALUE,也就确定了主题D、E所对应的所有订阅客户端id。需要理解的是,下级主题被订阅了,其上一级的主题也相当于被订阅了,例如订阅主题树中的主题D被订阅了,则主题A、B无论是否有相应的订阅客户端,都相当于被订阅了。
某一主题可能会被不同的节点服务器上的不同客户端订阅,某一客户端也可能订阅多个不同的主题,订阅关系树对这些信息可以做到简单、有效、可靠的持久存储,实现消息集群分布式共享。在Redis数据库中建立多级订阅主题的树结构,通过KEY-VALUE存储格式可以很容易的实现多节点的快速读、写响应。
例如,把tn:p2p作为KEY,其VALUE为tn:p2p/device/;同理把tn:p2p/device作为KEY,其VALUE为tn:p2p/device/uuid123,这样就可以依据多级的订阅主题建立订阅主题树结构;同时会在KEY为cli:p2p/device/uuid123下存储订阅该主题的客户端的id。那么比如订阅topic:p2p/device/+的消息时,MQTT的协议内容会向订阅p2p/device/X级别所有的topic发消息;节点服务器会先查找tn:p2p/device下的所有VALUE值,并分别根据各VALUE值查找cli:下所有的相对应的KEY,对其下所有VALUE值所代表的订阅客户端推送相应的消息。例如,tn:p2p/device下的VALUE有tn:p2p/device/uuid123,tn:p2p/device/uuid1234;那么订阅客户端的KEY为cli:p2p/device/uuid123,cli:p2p/device/uuid1234,获取该KEY下相应订阅客户端的id并做相应的消息推送。
以上的仅是本发明的优选实施方式,本发明不限于以上实施例。可以理解,本领域技术人员在不脱离本发明的基本构思的前提下直接导出或联想到的其它改进和变化均应认为包含在本发明的保护范围之内。
Claims (7)
1.一种消息推送方法,其特征在于:
包括以下步骤:
基于MQTT协议与客户端建立通信连接;
接收客户端订阅的主题;
解析客户端订阅的主题,确定该主题与订阅该主题的客户端之间的订阅关系;
将订阅关系存储到Redis数据库内共享的订阅关系树中,所述订阅关系树包含了订阅主题树、订阅客户端树,所述订阅主题树依据主题的层级结构建立,是以被订阅的主题为VALUE的数据结构,所述订阅客户端树是以所述订阅主题树中的VALUE为KEY的数据结构,所述订阅客户端树中的KEY的VALUE为订阅该KEY的客户端的id所述订阅主题树中的VALUE以该VALUE的上一级的主题为KEY;
获取消息,从所述订阅关系树中获取与所述消息的主题相对应的订阅关系,依据订阅关系将所述消息的有效载荷推送至相应的客户端;
所述从所述订阅关系树中获取与所述消息的主题相对应的订阅关系,依据订阅关系将所述消息的有效载荷推送至相应的客户端的步骤包含:
查询所述订阅主题树,从所述订阅主题树中找到与所述消息相对应的VALUE;
以该VALUE作为所述订阅客户端树的KEY,查找该KEY在所述订阅客户端树中的所有VALUE;
判断该KEY在所述订阅客户端树中的所有VALUE中是否存在本地的客户端id;若为是,则依据所述的本地的客户端id将所述消息的有效载荷推送至相应的客户端。
2.根据权利要求1所述的消息推送方法,其特征在于:
所述将订阅关系存储到Redis数据库内共享的订阅关系树中的步骤包含:
判断该主题是否已是所述订阅主题树中的VALUE;若为是,则查找所述订阅客户端树中与该主题相对应的KEY;若为否,则将该主题设置为所述订阅主题树中的VALUE,并将该主题设置为所述订阅客户端树中的KEY;
将订阅该主题的客户端id记为所述订阅客户端树中相对应的KEY的VALUE。
3.根据权利要求1所述的消息推送方法,其特征在于:
还包括以下步骤:
将与客户端之间的会话信息存储到Redis数据库中。
4.根据权利要求1所述的消息推送方法,其特征在于:
推送客户端发布的消息。
5.一种消息推送方法,其特征在于:
与客户端建立通信连接;
将与客户端之间的会话信息存储到非关系型数据库中;
接收客户端发出的消息订阅请求;
解析消息订阅请求,确定消息与订阅该消息的客户端之间的订阅关系,所述订阅关系树包含了订阅主题树、订阅客户端树,所述订阅主题树依据主题的层级结构建立,是以被订阅的主题为VALUE的数据结构,所述订阅客户端树是以所述订阅主题树中的VALUE为KEY的数据结构,所述订阅客户端树中的KEY的VALUE为订阅该KEY的客户端的id,所述订阅主题树中的VALUE以该VALUE的上一级的主题为KEY;
将订阅关系存储到非关系型数据库内共享的订阅关系树中;
获取消息,并从订阅关系树中获取与该消息相对应的订阅关系,依据订阅关系将该消息推送至相应的客户端;
所述从订阅关系树中获取与该消息相对应的订阅关系,依据订阅关系将该消息推送至相应的客户端的步骤包含:
查询所述订阅主题树,从所述订阅主题树中找到与所述消息相对应的VALUE;
以该VALUE作为所述订阅客户端树的KEY,查找该KEY在所述订阅客户端树中的所有VALUE;
判断该KEY在所述订阅客户端树中的所有VALUE中是否存在本地的客户端id;若为是,则依据所述的本地的客户端id将所述消息的有效载荷推送至相应的客户端。
6.一种消息推送系统,其特征在于:
包括Redis数据库、若干节点服务器;
所述节点服务器基于MQTT协议与客户端建立通信连接;
并且,所述节点服务器接收客户端订阅的主题;
所述节点服务器解析客户端订阅的主题,确定该主题与订阅该主题的客户端之间的订阅关系;
所述节点服务器将订阅关系存储到Redis数据库内共享的订阅关系树中,所述订阅关系树包含了订阅主题树、订阅客户端树,所述订阅主题树依据主题的层级结构建立,是以被订阅的主题为VALUE的数据结构,所述订阅客户端树是以所述订阅主题树中的VALUE为KEY的数据结构,所述订阅客户端树中的KEY的VALUE为订阅该KEY的客户端的id,所述订阅主题树中的VALUE以该VALUE的上一级的主题为KEY;
所述节点服务器获取消息,并从订阅关系树中获取与该消息的主题相对应的订阅关系,依据订阅关系将该消息的有效载荷推送至相应的客户端;
所述服务器,查询所述订阅主题树,从所述订阅主题树中找到与所述消息相对应的VALUE;以该VALUE作为所述订阅客户端树的KEY,查找该KEY在所述订阅客户端树中的所有VALUE。
7.根据权利要求6所述的消息推送系统,其特征在于:
还包括消息队列;
所述节点服务器推送客户端发布的消息至消息队列中;
所述节点服务器从消息队列中获取消息;
所述节点服务器将与客户端之间的会话信息存储到Redis数据库中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810561163.5A CN110557423B (zh) | 2018-06-04 | 2018-06-04 | 一种消息推送方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810561163.5A CN110557423B (zh) | 2018-06-04 | 2018-06-04 | 一种消息推送方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110557423A CN110557423A (zh) | 2019-12-10 |
CN110557423B true CN110557423B (zh) | 2022-02-11 |
Family
ID=68734845
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810561163.5A Active CN110557423B (zh) | 2018-06-04 | 2018-06-04 | 一种消息推送方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110557423B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111597184A (zh) * | 2020-04-01 | 2020-08-28 | 深圳英飞拓智能技术有限公司 | 一种基于树形结构数据的消息发布与订阅的方法和装置 |
CN113630366A (zh) * | 2020-05-07 | 2021-11-09 | 中移物联网有限公司 | 一种物联网设备接入方法及系统 |
CN113301558B (zh) * | 2020-06-29 | 2022-09-27 | 阿里巴巴集团控股有限公司 | 一种消息传输方法、设备、系统及存储介质 |
CN113992741B (zh) * | 2020-07-10 | 2023-06-20 | 华为技术有限公司 | 一种发布数据索引方法及装置 |
CN111814091B (zh) * | 2020-07-17 | 2023-11-28 | 北京达佳互联信息技术有限公司 | 消息分发方法及相关装置 |
CN113301088B (zh) * | 2020-07-27 | 2022-06-03 | 阿里巴巴集团控股有限公司 | 消息处理方法、装置、系统、电子设备及可读存储介质 |
CN111970363B (zh) * | 2020-08-17 | 2022-08-16 | 北京金山云网络技术有限公司 | 基于物联网的数据处理方法及装置 |
CN112637043B (zh) * | 2020-11-17 | 2022-03-18 | 广州市玄武无线科技股份有限公司 | 消息过滤方法、系统、终端及存储介质 |
CN113779054A (zh) * | 2021-02-24 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 数据更新方法、装置、服务端、存储介质及程序产品 |
CN113382048A (zh) * | 2021-05-28 | 2021-09-10 | 广东好太太智能家居有限公司 | 一种消息推送方法、系统、设备及存储介质 |
CN113783838B (zh) * | 2021-08-05 | 2024-02-06 | 山东有人物联网股份有限公司 | 一种订阅方法、订阅控制装置及计算机可读存储介质 |
CN114629935A (zh) * | 2022-02-17 | 2022-06-14 | 深圳市双合电气股份有限公司 | 一种生产管理事件消息实时传输处理系统和方法 |
CN114903474A (zh) * | 2022-05-25 | 2022-08-16 | 上海大学 | 一种可穿戴式汗液数据监测系统及汗液数据监测方法 |
CN115914246A (zh) * | 2022-10-08 | 2023-04-04 | 广州市玄武无线科技股份有限公司 | 离线消息的点对点通信方法、系统、装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106130882A (zh) * | 2016-07-13 | 2016-11-16 | 北京百度网讯科技有限公司 | 用于传输消息的方法和装置 |
CN106657394A (zh) * | 2017-02-10 | 2017-05-10 | 山东浪潮商用系统有限公司 | 一种基于物联网大数据的设备信息采集系统及方法 |
CN106775772A (zh) * | 2017-01-20 | 2017-05-31 | 山东浪潮商用系统有限公司 | 一种基于Mqtt协议服务器实现方法 |
CN107592351A (zh) * | 2017-09-06 | 2018-01-16 | 北京锐安科技有限公司 | 一种基于Redis的多用户发布订阅方法及系统 |
-
2018
- 2018-06-04 CN CN201810561163.5A patent/CN110557423B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106130882A (zh) * | 2016-07-13 | 2016-11-16 | 北京百度网讯科技有限公司 | 用于传输消息的方法和装置 |
CN106775772A (zh) * | 2017-01-20 | 2017-05-31 | 山东浪潮商用系统有限公司 | 一种基于Mqtt协议服务器实现方法 |
CN106657394A (zh) * | 2017-02-10 | 2017-05-10 | 山东浪潮商用系统有限公司 | 一种基于物联网大数据的设备信息采集系统及方法 |
CN107592351A (zh) * | 2017-09-06 | 2018-01-16 | 北京锐安科技有限公司 | 一种基于Redis的多用户发布订阅方法及系统 |
Non-Patent Citations (3)
Title |
---|
Mosquito的优化-订阅书优化(八);逍遥子;《CSDN博客》;20150608;全文 * |
mosquitto源码分析(二)订阅树的搭建;风雪夜归人;《个人图书馆》;20141009;全文 * |
Redis发布订阅机制;yitudake;《博客园》;20170422;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110557423A (zh) | 2019-12-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110557423B (zh) | 一种消息推送方法及系统 | |
US11411897B2 (en) | Communication method and communication apparatus for message queue telemetry transport | |
CN111970315A (zh) | 推送消息的方法、装置及系统 | |
US7543020B2 (en) | Distributed client services based on execution of service attributes and data attributes by multiple nodes in resource groups | |
RU2471227C2 (ru) | Содействуемая обслуживающим узлом и одноранговая синхронизация | |
US10579595B2 (en) | Method and device for calling a distributed file system | |
US20080133541A1 (en) | Flexible Topic Identification in a Publish/Subscribe System | |
CN109032803B (zh) | 数据处理方法和装置、客户端 | |
US8335762B2 (en) | Resource tracking | |
US8208477B1 (en) | Data-dependent overlay network | |
CN112769671B (zh) | 消息处理方法、装置与系统 | |
EP3779692B1 (en) | Blockchain data processing | |
CN113127232A (zh) | 消息处理方法、装置、设备及存储介质 | |
US10863347B2 (en) | Policy enhancement for mixed capability devices | |
CN110427266B (zh) | 基于mqtt服务的数据冗余架构 | |
US20180260466A1 (en) | Identifier based data replication | |
US11714692B2 (en) | Classical management of qubit requests | |
CN111130905A (zh) | 基于分布式集群的日志级别动态调整方法 | |
US10904327B2 (en) | Method, electronic device and computer program product for searching for node | |
CN103428231B (zh) | 离线下载方法和系统 | |
CN113612811B (zh) | 一种在多通道中客户端挂载的方法、系统、设备及介质 | |
CN113296968B (zh) | 地址列表更新方法、装置、介质及电子设备 | |
CN111865896A (zh) | 一种云系统及云服务消费方法 | |
CN114328129A (zh) | 消息发送方法、装置、设备及存储介质 | |
CN113630317A (zh) | 一种数据传输方法、装置、非易失性存储介质及电子装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |