一种消息推送方法、装置、系统、电子设备和存储介质与流程

文档序号:26003964发布日期:2021-07-23 21:21阅读:117来源:国知局
一种消息推送方法、装置、系统、电子设备和存储介质与流程

本申请涉及websocket消息推送技术领域,特别涉及一种消息推送方法、装置、系统、电子设备和存储介质。



背景技术:

目前,传统的websocket实时消息推送服务,在websocket服务器集群环境部署下会存在无法准确识别用户对象具体存放的节点服务器的位置,从而导致消息推送无法有效送达到客户端。相关技术中,业务方随机发送消息到某一服务器时,该服务器通过遍历zookeeper中间件的方式来获取其他各个服务器的信息,该zookeeper中间件中注册有服务器集群的信息,然后该服务器将接收到的消息发送给其他各个服务器,以达到将消息有效送达给客户端的目的。这种方式首先需要访问zookeeper中间件,再一一发送消息给各个服务器,过程繁琐且效率低。



技术实现要素:

本申请的目的是提供一种消息推送方法、装置、系统、电子设备和存储介质,websocket服务集群可直接接收到redis消息中间件广播的指定消息,进而发送给目标用户信息对应的客户端,实现过程简单高效,方便快捷,并能够保证消息有效送达到客户端。其具体方案如下:

第一方面,本申请公开了一种消息推送方法,包括:

websocket服务集群中各个服务器订阅redis消息中间件的用户消息主题;

当业务方发布指定消息到所述redis消息中间件时,所述websocket服务集群中各个服务器接收所述redis消息中间件广播的所述指定消息;

所述websocket服务集群中各个服务器检测本地是否存储有目标用户信息;所述目标用户信息为与所述指定消息对应的用户信息;

存储有所述目标用户信息的服务器将接收到的所述指定消息推送至所述目标用户信息对应的客户端。

可选的,在所述存储有所述目标用户信息的服务器将接收到的所述指定消息推送至所述目标用户信息对应的客户端之前,还包括:

若存储有所述目标用户信息的服务器检测到所述目标用户信息中的用户状态为不在线时,将所述指定消息存储于mysql数据库,以当所述目标用户信息中的用户状态为在线时,发送所述指定消息至所述目标用户信息对应的客户端。

可选的,所述当业务方发布指定消息到所述redis消息中间件时,所述websocket服务集群中各个服务器接收所述redis消息中间件广播的所述指定消息,包括:

当所述业务方调用消息分发服务将发布的所述指定消息发送至所述redis消息中间件时,所述websocket服务集群中各个服务器接收所述redis消息中间件广播的所述指定消息。

可选的,所述存储有所述目标用户信息的服务器将接收到的所述指定消息推送至所述目标用户信息对应的客户端,包括:

当注册有所述目标用户信息的客户端包含多个时,存储有所述目标用户信息的服务器将接收到的所述指定消息推送至注册有所述目标用户信息的各个客户端。

可选的,在所述存储有所述目标用户信息的服务器将接收到的所述指定消息推送至所述目标用户信息对应的客户端之前,还包括:

存储有所述目标用户信息的服务器接收所述目标用户信息对应的客户端的cmd连接请求;

解析所述cmd连接请求,得到所述目标用户信息;

对所述目标用户信息进行安全验证与鉴权;

若校验通过,则执行所述存储有所述目标用户信息的服务器将接收到的所述指定消息推送至所述目标用户信息对应的客户端的步骤。

可选的,还包括:

当接收到所述目标用户信息对应的客户端的心跳检测请求后,发送响应信号至所述客户端,以告知所述客户端当前所述websocket服务集群的状态为可用。

第二方面,本申请公开了一种消息推送装置,应用于websocket服务集群,包括:

订阅模块,用于websocket服务集群中各个服务器订阅redis消息中间件的用户消息主题;

接收模块,用于当业务方发布指定消息到所述redis消息中间件时,所述websocket服务集群中各个服务器接收所述redis消息中间件广播的所述指定消息;

确定模块,用于所述websocket服务集群中各个服务器检测本地是否存储有目标用户信息;所述目标用户信息为与所述指定消息对应的用户信息;

推送模块,用于存储有所述目标用户信息的服务器将接收到的所述指定消息推送至所述目标用户信息对应的客户端。

第三方面,本申请公开了一种消息推送系统,包括:

业务方,用于发布指定消息至redis消息中间件,以使所述redis消息中间件广播所述指定消息至websocket服务集群中各个服务器;

所述websocket服务集群中各个服务器,用于执行如权利要求1至6任一项所述消息推送方法的步骤;

客户端,用于接收所述websocket服务集群中存储有目标用户信息的服务器发送的所述指定消息。

第四方面,本申请公开了一种电子设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述消息推送方法的步骤。

第五方面,本申请公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述消息推送方法的步骤。

本申请提供一种消息推送方法,包括:websocket服务集群中各个服务器订阅redis消息中间件的用户消息主题;当业务方发布指定消息到所述redis消息中间件时,所述websocket服务集群中各个服务器接收所述redis消息中间件广播的所述指定消息;所述websocket服务集群中各个服务器检测本地是否存储有目标用户信息;所述目标用户信息为与所述指定消息对应的用户信息;存储有所述目标用户信息的服务器将接收到的所述指定消息推送至所述目标用户信息对应的客户端。

可见,本申请通过利用redis消息中间件的发布订阅模式,websocket服务集群中各个服务器订阅用户消息主题,也就是说业务方将发布的消息给redis消息中间件时,就会广播指定消息给订阅的websocket服务集群各个服务器,websocket服务集群中的各个服务器均会接收到该指定消息,不论目标用户信息存放于哪个服务器,最终目标用户信息对应的客户端都可获取到指定消息;即本申请中websocket服务集群中各个服务器可直接接收到redis消息中间件广播的指定消息,进而存储有目标用户信息的服务器可直接发送指定消息给客户端,避免了相关技术中接收到消息的服务器需要访问zookeeper中间件以获取服务集群中其他各个服务器信息,再一一发送消息给其他各个服务器,以实现将消息发送给指定的客户端,过程繁琐且效率低的缺陷,本申请中的websocket服务集群各个服务器可直接接收到redis消息中间件广播的指定消息,进而发送给目标用户信息对应的客户端,实现过程简单高效,方便快捷,并能够保证消息有效送达到客户端。本申请同时还提供了一种消息推送装置、系统、电子设备和计算机可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

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

图1为本申请实施例所提供的一种消息推送方法的流程图;

图2为本申请实施例所提供的一种websocket实时消息推送系统的结构示意图;

图3为传统消息推送的业务方、websocket服务集群与客户端的结构示意图;

图4为本申请实施例所提供的基于redis订阅模型的消息推送关于业务方、websocket服务集群与客户端的结构示意图;

图5为本申请实施例提供的一种消息推送装置的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

现有传统的websocket(基于tcp的全双工通信协议)实时消息推送服务,无法支持高可用离线消息推送,而且只能选择单一客户端进行消息推送。而且在websocket服务器集群环境部署下会存在识别不到用户对象准确的存放节点位置的情况,从而导致推送消息无法有效送达到客户端。相关技术中采用遍历zookeeper(一个分布式的,开放源码的分布式应用程序协调服务)中间件的方式来获取其他各个服务器的信息,然后该服务器将接收到的消息发送给其他各个服务器,以达到将消息有效送达给客户端的目的。这种方式首先需要访问zookeeper中间件,再一一发送消息给各个服务器,过程繁琐且效率低。

基于上述技术问题,本实施例提供一种消息推送方法,websocket服务集群各个服务器可直接接收到redis(一个key-value存储系统,充当缓存作用)消息中间件广播的指定消息,进而发送给目标用户信息对应的客户端,实现过程简单高效,方便快捷,并能够保证消息有效送达到客户端,具体请参考图1,图1为本申请实施例所提供的一种消息推送方法的流程图,具体包括:

s101、websocket服务集群中各个服务器订阅redis消息中间件的用户消息主题。

可以理解的是,消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统。发布者往消息中间件的channel(频道)发布一条消息,所有订阅该channel的订阅者都可以得到这条消息。本实施例采用redis消息中间件,相比较于其他消息中间件,实现起来较为方便,消息传输速率也较快。本实施例中websocket服务集群中各个服务器作为订阅者订阅redis消息中间件的用户消息主题,当发布者(本实施例中发布者为业务方)发布消息后,redis消息中间件接收该消息并广播给订阅者即websocket服务集群中各个服务器。本实施例并不限定websocket服务集群中服务器的数量,可根据实际情况进行设定。

s102、当业务方发布指定消息到redis消息中间件时,websocket服务集群中各个服务器接收redis消息中间件广播的指定消息。

可以理解的是,本实施例中的指定消息可以是业务方主动发布的,例如当客户订阅的套餐到期限了,那么业务方就可以主动发布消息告知客户端套餐已到期限;还可以是客户端主动发出某请求时,业务方生成指定消息给客户端。还可以理解的是,业务方可以直接发送给redis消息中间件,也可以是通过业务方调用消息分发服务将指定消息发送到redis消息中间件。在一种具体的实施例中,当业务方发布指定消息到redis消息中间件时,websocket服务集群中各个服务器接收redis消息中间件广播的指定消息,可以包括:

当业务方调用消息分发服务将发布的指定消息发送至redis消息中间件时,websocket服务集群中各个服务器接收redis消息中间件广播的指定消息。

本实施例中业务方通过调用消息分发服务将发布的指定消息发送到redis消息中间件,可以理解的是,若业务方直接将发布的指定消息送达至redis消息中间件时,由于业务方很多,每个业务方都需要实现对消息的管理与发送,都需要相应的逻辑,需要较高的开发成本,而利用消息分发服务可理解为统一实现对消息的管理与发送,业务方直接调用该服务来承接发布的指定消息,可以有效减少开发成本。

s103、websocket服务集群中各个服务器检测本地是否存储有目标用户信息;目标用户信息为与指定消息对应的用户信息。

可以理解的是,用户是随机注册在websocket服务集群中的某个服务器上的,该服务器就会本地存储有该用户的用户信息。本实施例中将指定信息对应的用户信息即为目标用户信息,可以理解的是,可以是目标用户信息对应的用户主动请求业务方发布指定消息自身,也可以是业务方主动发布指定消息的目标对象即为目标用户信息对应的用户。本实施例中websocket服务集群中的各个服务器通过检测本地是否存储有目标用户信息,可确定哪个服务器存储有目标用户信息。

s104、存储有目标用户信息的服务器将接收到的指定消息推送至目标用户信息对应的客户端。

本实施例中检测到存储有目标用户信息的服务器将接收到的指定消息推送到目标用户信息所对应的客户端。本实施例并不限定目标用户信息所对应的客户端的具体个数,可以是1个,可以是3个,根据实际情况而定,例如可以是pc客户端,可以是移动终端如手机,可以是h5移动端。在一种具体的实施例中,存储有目标用户信息的服务器将接收到的指定消息推送至目标用户信息对应的客户端,可以包括:

当注册有目标用户信息的客户端包含多个时,存储有目标用户信息的服务器将接收到的指定消息推送至注册有目标用户信息的各个客户端。

即本实施例中注册有目标用户信息的客户端包含多个时,存储有目标用户信息的服务器就会将接收到的指定消息全部推送到各个客户端。可以高效支持同时推断消息至多客户端,能够实现多渠道发送消息。

在一种具体的实施例中,为了有效提高系统信息交互的安全性,本实施例中在存储有目标用户信息的服务器将接收到的指定消息推送至目标用户信息对应的客户端之前,还可以包括:

存储有目标用户信息的服务器接收目标用户信息对应的客户端的cmd连接请求;

解析cmd连接请求,得到目标用户信息;

对目标用户信息进行安全验证与鉴权;

若校验通过,则执行存储有目标用户信息的服务器将接收到的指定消息推送至目标用户信息对应的客户端的步骤。

可以理解的是,目标用户信息对应的用户是预先在服务器注册的,那么注册的服务器就会存储有目标用户信息。本实施例中存储有目标用户信息的服务器接收目标用户信息对应的客户端的cmd(命令提示符)连接请求。本实施例并不限定cmd连接请求的具体内容,可以包括消息内容,可以包括用户请求类型,可以包括用户标识。本实施例中解析cmd连接请求,得到目标用户信息,本实施例并不限定解析cmd连接请求的具体过程,可参考相关技术。相应的,本实施例也不限定目标用户信息的具体内容,可以包括用户标识信息,可以包括用户请求类型,例如,link(连接服务)、close(服务关闭)、heartbeat(心跳检测)、msg(业务消息)。然后,对解析得到的目标用户信息进行安全验证与鉴权,可以理解的是,安全验证是对用户身份信息的验证,例如验证该用户是否被拉黑等;鉴权验证也就是判断是否具有权限的验证,具体可参考相关技术,本实施例中不再进行赘述。当校验通过后,再执行存储有目标用户信息的服务器将接收到的指定消息推送至目标用户信息对应的客户端的步骤。可以有效提高系统信息交互的安全性,防止恶意者篡改用户信息或使用假的用户信息去请求业务方进行相关操作。

进一步的,为了保证消息不被丢失,本实施例中在存储有目标用户信息的服务器将接收到的指定消息推送至目标用户信息对应的客户端之前,还可以包括:

若存储有目标用户信息的服务器检测到目标用户信息中的用户状态为不在线时,将指定消息存储于mysql数据库,以当目标用户信息中的用户状态为在线时,发送指定消息至目标用户信息对应的客户端。

本实施例中存储有目标用户信息的服务器当检测到登陆有目标用户信息的客户端的用户状态不在线时,将指定消息存储到mysql数据库,当用户在线时,再发送指定消息到目标用户信息所在的客户端。能够有效保证消息不被丢失。

进一步的,为了定时告知客户端关于websocket集群服务的可用性,本实施例中还可以包括:

当接收到目标用户信息对应的客户端的心跳检测请求后,发送响应信号至客户端,以告知客户端当前websocket服务集群的状态为可用。

可以理解的是,客户端与websocket服务集群建立可靠双向连接后,客户端会定时不间断的向websocket服务集群发送心跳检测(heartbeat)请求,当websocket集群服务中各个服务器接收到目标用户信息对应客户端的心跳检测请求后,可发送响应信号给该客户端,来告知客户端当前websocket服务集群的状态为可用。

基于上述技术方案,本实施例通过利用redis消息中间件的发布订阅模式,websocket服务集群中各个服务器订阅用户消息主题,也就是说业务方将发布的消息给redis消息中间件时,就会广播指定消息给订阅的websocket服务集群各个服务器,websocket服务集群中的各个服务器均会接收到该指定消息,不论目标用户信息存放于哪个服务器,最终目标用户信息对应的客户端都可获取到指定消息,实现过程简单高效,方便快捷,并能够保证消息有效送达到客户端。

以下为本实施例提供的一种基于java应用websocket实时消息推送系统的具体实施例。能够满足用户在多端在线情况下能够准确有效的收到来自服务端数据的通知,保证消息不丢失;用户在离线情况下也能保证消息不丢失,有效提升消息的送达率;针对websocket服务集群环境部署下也能有效准确定位客户端连接的节点服务器位置。

1、各业务方与客户端(app/pc/h5)会约定一种消息格式,即定义一套完整的消息交互结构。消息的主要类型可分为:link(连接服务)、close(服务关闭)、heartbeat(心跳检测)、msg(业务消息)用于前后端的交互和识别。

2、websocket服务集群中各个服务器会通过redis消息中间件的消息订阅模型方式去订阅消息分发服务上的user-msg-topic(用户消息主题),然后等待客户端的连接请求。一旦请求触发,websocekt服务集群中的服务器会根据客户端发送的cmd连接请求,解析cmd连接请求中消息体的内容,并识别用户请求类型,然后对用户的身份进行安全认证与鉴权。通过之后,会对该客户端的用户信息即目标用户信息利用concurrenthashmap(保证多线程安全)进行本地存储,服务器同时会对用户进行离线消息检测并发送。

3、消息分发服务会将业务方请求的变更消息数据发布在redis消息中间件的user-msg-topic上,后续websocket服务集群会因为redis消息的广播通知,每个集群节点都会接受到该消息数据的通知,从而匹配本地用户的信息进行发送。如果用户不在线,websocket集群服务会把消息存储在mysql数据库中的离线表,等待后续用户重新连接再对其重复发送,可保证消息不被丢失。

4、客户端与websocket服务集群建立可靠双向连接后,客户端会定时不间断的向websocket服务集群发送心跳检测请求来确保websocket服务集群的可用性,websocket服务集群会发送响应信号给客户端,以告知客户端当前websocket服务集群的状态为可用。

图2为本实施例提供的一种websocket实时消息推送系统的结构示意图。其中,msg-router-node-1指的是消息分发服务节点1、msg-router-node-2指消息分发服务节点2、msg-router-node-3指消息分发服务节点3。

1、首先,部署多台(>=2)websocket服务集群服务器以及1台或多台消息分发服务;

2、消息分发服务开启redis消息中间件的订阅模型user-msg-topic,websocket服务集群对其进行订阅;

3、客户端(app/h5/pc)向websocket服务集群发起link请求建立连接;

4、业务方将预先准备好的100条测试数据向消息分发服务进行推送,消息分发服务能够通过redis消息中间件订阅模型的user-msg-topic向websocket服务集群进行消息广播,websocket服务集群中各个服务器接受到广播之后匹配各自集群节点的用户信息,若检测到本地存储有该用户信息,则存储有该用户信息的服务器进行消息推送;

5、最终客户端(app/h5/pc)三端都能够同时接收到100条消息数据提醒。

图3为传统消息推送的业务方、websocket服务集群与客户端的结构示意图,图中bizserver代表业务方,ws连接代表websocket通信连接;图4为基于redis订阅模型的消息推送关于业务方、websocket服务集群与客户端的结构示意图。

基于上述技术方案,相关技术中无法支持多客户端推送动态消息,且针对websocket服务集群环境下无法准确定位到用户连接存放的具体服务节点,本申请实施例可以高效支持多客户端同时推送动态消息,并针对websocket服务集群环境下能够有效精准定位到用户连接存放的具体服务器节点位置,而且还能够支持websocket服务集群环境下的订阅与发布还可以根据自己需求进行客户端的渠道扩展,增加推送的灵活性。

下面对本申请实施例提供的一种消息推送装置进行介绍,下文描述的消息推送装置与上文描述的消息推送方法可相互对应参照,相关模块均设置于中,参考图5,图5为本申请实施例所提供的一种消息推送装置的结构示意图,包括:

在一些具体的实施例中,具体包括:

订阅模块501,用于websocket服务集群中各个服务器订阅redis消息中间件的用户消息主题;

接收模块502,用当业务方发布指定消息到redis消息中间件时,websocket服务集群中各个服务器接收redis消息中间件广播的指定消息;

确定模块503,用于websocket服务集群中各个服务器检测本地是否存储有目标用户信息;目标用户信息为与指定消息对应的用户信息;

推送模块504,用于存储有目标用户信息的服务器将接收到的指定消息推送至目标用户信息对应的客户端。

在一些具体的实施例中,还包括:

存储模块,用于若存储有目标用户信息的服务器检测到目标用户信息中的用户状态为不在线时,将指定消息存储于mysql数据库,以当目标用户信息中的用户状态为在线时,发送指定消息至目标用户信息对应的客户端。

在一些具体的实施例中,接收模块502,包括:

接收单元,用于当业务方调用消息分发服务将发布的指定消息发送至redis消息中间件时,websocket服务集群中各个服务器接收redis消息中间件广播的指定消息。

在一些具体的实施例中,推送模块504,包括:

推送单元,用于当注册有目标用户信息的客户端包含多个时,存储有目标用户信息的服务器将接收到的指定消息推送至注册有目标用户信息的各个客户端。

在一些具体的实施例中,还包括:

接收连接请求模块,用于存储有目标用户信息的服务器接收目标用户信息对应的客户端的cmd连接请求;

解析模块,用于解析cmd连接请求,得到目标用户信息;

校验模块,用于对目标用户信息进行安全验证与鉴权;

在一些具体的实施例中,还包括:

发送模块,用于当接收到目标用户信息对应的客户端的心跳检测请求后,发送响应信号至客户端,以告知客户端当前websocket服务集群的状态为可用。

由于消息推送装置部分的实施例与消息推送方法部分的实施例相互对应,因此消息推送装置部分的实施例请参见消息推送方法部分的实施例的描述,这里暂不赘述。

本申请还公开一种消息推送系统,包括:

业务方,用于发布指定消息至redis消息中间件,以使redis消息中间件广播指定消息至websocket服务集群中各个服务器;

websocket服务集群中各个服务器,用于执行如上述消息推送方法的步骤;

客户端,用于接收websocket服务集群中存储有目标用户信息的服务器发送的指定消息。

由于消息推送系统部分的实施例与消息推送方法部分的实施例相互对应,因此消息推送系统部分的实施例请参见消息推送方法部分的实施例的描述,这里暂不赘述。

下面对本申请实施例提供的一种电子设备进行介绍,下文描述的电子设备与上文描述的消息推送方法可相互对应参照。

本申请还公开一种电子设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序时实现如上述消息推送方法的步骤。

由于电子设备部分的实施例与消息推送方法部分的实施例相互对应,因此电子设备部分的实施例请参见消息推送方法部分的实施例的描述,这里暂不赘述。

下面对本申请实施例提供的一种计算机可读存储介质进行介绍,下文描述的计算机可读存储介质与上文描述的消息推送方法可相互对应参照。

本申请还公开一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述消息推送方法的步骤。

由于计算机可读存储介质部分的实施例与消息推送方法部分的实施例相互对应,因此计算机可读存储介质部分的实施例请参见消息推送方法部分的实施例的描述,这里暂不赘述。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的一种消息推送方法、装置、系统、电子设备及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

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