一种传输消息的方法和系统技术方案

技术编号:18840443 阅读:1871 留言:0更新日期:2018-09-05 08:26
本申请公开了一种传输消息的方法和系统,所述方法包括如下步骤:接收用户端发送的消息;根据消息的内容建立键值对;根据所述键值对中的键,进行消息路由。通过采用本发明专利技术的方案,实现了订阅/发布服务器的集群模式,提高了发布/订阅服务器的并发处理能力,在集群模式下服务器可以动态扩容,扩展性更好。

A method and system for transmitting messages

The present application discloses a method and system for transmitting messages, which comprises the following steps: receiving a message sent by a client; establishing a key-value pair according to the content of the message; and routing a message according to the key of the key-value pair. By adopting the scheme of the invention, the cluster mode of the subscription/publishing server is realized, the concurrent processing capability of the publish/subscribe server is improved, and the server can be dynamically expanded and the scalability is better in the cluster mode.

【技术实现步骤摘要】
一种传输消息的方法和系统
本申请涉及一种传输消息的方法和系统,属于计算机

技术介绍
发布/订阅消息系统如今已经广泛应用于多种情况下的传输消息中,在一个发布/订阅消息系统中,发布者和订阅者都不是直接和对方联系,而是通过一个中间代理来转发消息。在这种情况下,发布者无需知道任何关于订阅者的信息,而订阅者只需要关注它感兴趣的主题就可以了,无需知道是哪个具体的客户端在给它发布消息。通过中间代理来转发消息,实现了发布者和订阅者的解耦。不过这种系统也存在一些缺陷,在这种传统的发布/订阅消息系统中,中间代理(比如服务器)通常只能单节点运行,而不能支持集群模式,这意味着在这样的系统中,客户端(也就是发布者和订阅者)的连接数量是有限的,消息并发的数量也不能太高,无法动态扩容,在这方面需要改进。
技术实现思路
本申请提供一种传输消息的方法和系统,用以解决目前传统的发布/订阅消息系统的服务器不能集群,难以支持高并发量消息的问题。所述方法包括如下步骤:接收用户端发送的消息;根据消息的内容建立键值对;根据所述键值对中的键,进行消息路由。对应的,本申请还提供一种传输消息系统,所述系统包括:一种传输消息系统,其特征在于,包括:服务器,接收来自用户端的消息,并根据消息的内容建立键值对,根据所述键值对中的键,通过消息代理客户端调用消息代理装置。和消息代理装置,接收来自消息代理客户端的调用指令,进行消息路由。通过采用本专利技术的方案,实现多个服务器利用消息代理装置对消息进行订阅/发布,也就是实现了服务器的集群模式,提高了发布/订阅服务器的并发处理能力,在集群模式下可以动态扩容,扩展性更好。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1为本申请一个方法实施例的流程示意图;图2是本申请一个实施例中的主题——用户端连接键值对结构示意图;图3为MQTT服务器解析connect控制包的流程示意图;图4为MQTT服务器解析publish控制包的流程示意图;图5为本申请中MQTT服务器调用Redis订阅客户端的流程示意图;图6为本专利技术一个系统实施例的系统结构示意图;图7为本专利技术另一个系统实施例的系统结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。一种传输消息的方法,如图1所示,图1为本申请实施例所提供的流程示意图,包括如下步骤:S1,接收用户通过用户端发送的消息。在一个订阅/发布系统中,用户端既可以是消息订阅者,也可以是消息发布者。同时,一个用户也可以采用多种途径或者设备来连接服务器,比如同一个用户他可以采用手机、电脑或者IPAD等多种方式来连接服务器。在通常的情况下,用户端都是连接到一个服务器进行彼此间的订阅/发布的,这虽然也可以实现用户之间的传输消息,但是在这种情况下,服务器只能支持单节点运行,而不能支持服务器的集群模式。S2,根据消息的内容建立键值对。在用户端发到服务器的消息中,通常包含有很多内容,比如用户名、密码、用户端与服务器之间的连接标识、用户需要订阅/发布的主题,在一个发布者发送的消息中,还会包括用户需要发布的内容等等。通常这些消息都是采用具有固定格式的数据包发送而来的,这里,服务器可以通过API接口进行解析,进而提取出发来的消息中所包含的内容。根据用户的不同需求,发来的数据包格式也会不一样,从而提取出的消息内容也会不同。这其中的一些内容并不是其他用户所需要的,比如订阅者并不需要发布者的用户命和密码等。订阅者需要的内容是消息里所包含的用户需要订阅的主题和发布者所发布的内容。此外,服务器还需要知道是哪个用户端连接到服务器,以及怎么把消息准确的按照路线转发过去,也就是在这里,说需要一个标识来唯一对应的代表一条用户端与服务器之间的连接,以便服务器能够根据该标识识别用户端,准确的将消息发送到相关的订阅者。用户端与服务器之间的连接标识在各种情况下有各种表现形式,比如用户端标识、用户标识等等,根据不同情况而定。同一个用户有可能具有多种连接到服务器的途径,这时候它就会具有多个不同的连接标识,每个连接标识唯一的代表了一条用户到服务器的连接。多个标识可以数组的形式组合在一起形成一个用户端连接标识队列。获取了消息的内容以后,就可以根据用户端与服务器之间的连接标识和用户需要订阅的主题建立键值对,即建立主题——用户端连接键值对,这里键值对的表现形式可以有多种,比如字典(dictionary)、映射(map)或者关联数组(associativearray)等。在一个主题——用户端连接键值对中,用户端订阅的主题为键,用户端到服务器的连接标识队列为值。这样在知道了主题之后,通过查找键值对,就可以知道所有订阅了该主题的连接标识,进而可以根据该连接准确的把发布者发布的消息发送到订阅者中。此外,还可以建立用户-连接键值对,键为用户名,值为数组,数组中的每个元素是连接标识,这里是由于是同一个用户可能有多个终端(手机,pad),可能同时连接多次服务器.也存在这样的情况,一个用户通过某终端多次连接服务器(可能是恶意的),这样通过用户-连接键值对,服务器就知道每个用户连接了多少终端了,可以揪出那些恶意发送消息的用户。S3,根据所述键值对中的键,进行消息路由。在建立了主题——连接键值对后,当一个用户在订阅时,服务器根据主题——连接键值对中的键值(也就是用户订阅的主题)作为消息代理客户端的频道参数,调用消息代理装置执行订阅操作,订阅消息代理中和主题名称相同的频道。而用户在发布消息时,则以发布者的主题作为消息代理客户端的频道参数,以用户需要发布的内容作为消息代理客户端的消息参数,调用消息代理装置执行发布操作,进行消息发布,将消息发布至每一个订阅了该主题的消息代理客户端。为了提升性能,消息代理还可以采用集群的模式,集群间的每个节点之间都能互相广播,这样任意一个消息发布过来,每个消息代理都可以收到这个发布消息,利用消息代理集群,也提升了服务器集群处理并发的性能。由此可见,在用户通过前述的方法在服务器上订阅了主题后,本质也就是用户通过服务器订阅了消息代理中的和主题对应的频道。这里首先说明一点,由于有些消息代理不能同时进行发布和订阅操作,方便起见,在服务器上设置消息代理订阅客户端和消息代理发布客户端。这里的发布客户端和订阅客户端可以在同一个服务器,也可以在不同的服务器上。由前述的内容可以知道发布者发布一个主题和相关的内容后,服务器解析,并得到该主题和他想要发布内容,然后,调用发布客户端以主题作为频道参数,以用户需要发布的内容作为消息参数,调用消息代理执行发布操作,发布消息至订阅了该频道的消息代理订阅客户端。消息代理订阅客户端收到消息后,再以此时的频道参数作为主题来查询服务器中的主题——连接键值对,这样就得到了该主题所对应的连接标识队列,换句话说,就是得到了所有订阅该主题的用户连接途径,然后只需要遍历这本文档来自技高网...

【技术保护点】
1.一种传输消息的方法,其特征在于,包括如下步骤:接收用户端发送的消息;根据消息的内容建立键值对;调用消息代理,根据所述键值对中的键,进行消息路由。

【技术特征摘要】
1.一种传输消息的方法,其特征在于,包括如下步骤:接收用户端发送的消息;根据消息的内容建立键值对;调用消息代理,根据所述键值对中的键,进行消息路由。2.如权利要求1所述的一种传输消息的方法,其特征在于,所述消息的内容包括:用户端连接标识、用户需要订阅或发布的主题和用户需要发布的内容。3.如权利要求2所述的一种传输消息的方法,其特征在于,所述键值对包括主题——用户端连接标识键值对,所述键值对中以用户需要订阅的主题作为键,以所述用户端连接标识组成的队列作为值。4.如权利要求3所述的一种传输消息的方法,其特征在于,所述调用消息代理,根据所述键值对中的键,进行消息路由,具体包括:以所述用户需要发布的主题作为消息代理客户端的频道参数,以用户需要发布的内容作为消息代理客户端的消息参数,进行发布;以所述键值对中的键作为消息代理客户端的频道参数,进行订阅;以消息代理客户端接收到的频道参数作为主题,对主题——连接键值对进行查询,获取用户端连接标识队列。5.如权利要求1所述的一种传输消息的方法,其特征在于,所述调用消息代理进行消息路由,还包括:多个所述消息代理所组成的集群中的各个节点之间进行消息广播。6.一种传输消息系统,其特征在于,包括:服务器,接收来自用户端的消息,并根据消息的内容建立键值对,根据所述...

【专利技术属性】
技术研发人员:熊雄许荣涛郑侃
申请(专利权)人:北京极智感科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1