一种实时推送消息的方法及系统技术方案

技术编号:37842803 阅读:20 留言:0更新日期:2023-06-14 09:47
本申请涉及一种实时推送消息的方法及系统,属于消息处理技术领域。所述方法包括以下步骤:WEB客户端通过长链接向消息订阅推送服务发送订阅请求信息;消息订阅推送服务接收到订阅请求信息后在Redis服务中执行订阅对应微服务的操作;微服务产生新的推送消息时,将推送消息发送到Redis服务;Redis服务将推送消息发送给消息订阅推送服务;消息订阅推送服务通过推送消息中的数据确定关联的WEB客户端,然后将推送消息通过长链接推送给对应的WEB客户端;解决现有技术中B/S架构的实时消息推送服务器端维护难度大,以及服务器资源浪费的问题。题。题。

【技术实现步骤摘要】
一种实时推送消息的方法及系统


[0001]本申请属于消息处理
,具体涉及一种实时推送消息的方法及系统。

技术介绍

[0002]在微服务大行其道的互联网应用架构时代,后端服务与服务之间的消息通信方式多种多样,但服务器端与web客户端的实时数据推送(我们平时在使用的聊天工具时会发现,发送方消息一发送,收信方就能在极短的时间内收到消息,这就是我们所说的消息实时推送)就显得有点吃力。
[0003]在B/S结构的应用程序里,web客户端也有实时获取服务器端消息的需求,web客户端想实时获取服务器端消息,第一种可以采用拉取方式,常见的就是ajax请求,就是客户端定时向服务器端发送请求获取数据,消息延迟大小取决于客户端请求的间隔时长,并且可能存在多次无效的请求,浪费资源。还有一种方式,通过WebSocket在服务器端和客户端之间建立一条消息通道,服务器端可以通过该通道实时推送消息给客户端,解决了消息的延迟性,但需要服务器端维护这个通道,并确保通道保持连接状态,大大增加了服务器端的维护难度。
[0004]现如今大部分服务器端应用都基于微服务架构进行开发,每个服务都承担自己范围内的业务功能,每个微服务都有各自的实时数据需要推送到web客户端,如果web客户端想接收所有实时数据,那必须和每个微服务都建立单独的交互链接,才能实时获取服务器端的消息,这就造成服务器资源浪费。

技术实现思路

[0005]为此,本专利技术提供一种实时推送消息的方法及系统,以解决现有技术中B/S结构的服务器端维护难度大,以及服务器资源浪费的问题。
[0006]为实现以上目的,本专利技术采用如下技术方案:
[0007]第一方面,本专利技术提供一种实时推送消息的方法,所述方法包括以下步骤:
[0008]至少一个WEB客户端与服务器端保持长链接;
[0009]所述服务器端包括消息订阅推送服务、Redis服务和至少一个微服务;
[0010]WEB客户端通过长链接向消息订阅推送服务发送订阅请求信息;消息订阅推送服务接收到订阅请求信息后保存,并根据订阅请求信息在Redis服务中执行订阅对应微服务的操作;
[0011]微服务产生新的推送消息时,微服务将推送消息发送到Redis服务;Redis服务接收到推送消息后判断该微服务是否被订阅状态,如果是被订阅状态则将推送消息发送给消息订阅推送服务;
[0012]消息订阅推送服务通过推送消息中的数据确定关联的WEB客户端,然后将推送消息通过长链接推送给对应的WEB客户端。
[0013]进一步地,还包括:
[0014]WEB客户端关闭后,WEB客户端与服务器端的长链接断开,消息订阅推送服务感知长链接断开后,从存储记录中查询并逻辑删除该WEB客户端对应的用户标识数据,并在Redis服务中执行取消订阅对应微服务的操作;
[0015]所述微服务在Redis服务中的订阅状态包括被订阅状态和无订阅状态,以A微服务为例,具体为:
[0016]消息订阅推送服务存储的订阅请求信息中至少有一条对A微服务的订阅记录,则A微服务在Redis服务中为被订阅状态,否则,消息订阅推送服务在Redis服务中执行取消A微服务的被订阅状态,此时A微服务在Redis中为无订阅状态;
[0017]A微服务产生新的推送消息时,A微服务将推送消息发送到Redis服务,Redis服务接收到推送消息后,查询A微服务是否为被订阅状态,如果是被订阅状态则Redis将推送消息发送到消息订阅推送服务,消息订阅推送服务根据所述步骤S2将推送消息发到WEB客户端;
[0018]如果A微服务在Redis服务中为无订阅状态,则Redis丢弃掉本条推送消息。
[0019]进一步地,所述订阅请求信息携带数据包括用户标识数据和channel标识数据,以键值对形式表达,将用户标识数据做为键,channel标识数据为值,channel标识数据代表微服务的标识。
[0020]进一步地,所述WEB客户端订阅过程具体为:
[0021]所述WEB客户端通过长链接向消息订阅推送服务发送用户标识数据和channel标识数据;
[0022]所述消息订阅推送服务接收所述WEB客户端发过来的用户标识数据和channel标识数据并以键值对形式存储在服务器端,之后消息订阅推送服务将channel标识数据订阅到Redis服务中,此时对应的微服务在Redis中为被订阅状态。
[0023]进一步地,所述推送消息携带数据包括channel标识数据和消息数据。
[0024]进一步地,所述微服务推送消息给WEB客户端具体步骤为:
[0025]所述微服务产生新的推送消息时,微服务会将channel标识数据和消息数据发送到Redis服务;。
[0026]所述Redis服务接收所述微服务发过来的channel标识数据和消息数据,判断channel标识数据是否被订阅到Redis服务中,如果在Redis服务中查询到该channel标识数据,Redis将channel标识数据和消息数据发送给所述消息订阅推送服务。
[0027]所述消息订阅推送服务在存储记录中查找channel数据标识,随即获取channel数据标识对应的用户标识,之后将消息数据发送到用户标识对应的WEB客户端。
[0028]进一步地,所述WEB客户端退订消息推送服务具体步骤为:
[0029]WEB客户端关闭后,消息订阅推送服务感知与WEB客户端的长链接断开,根据该WEB客户端的用户标识数据查找到含微服务channel的记录,并对该条数据进行逻辑删除操作,此时WEB客户端退订消息推送服务完成。
[0030]进一步地,判断所述微服务在Redis中的订阅状态的依据具体为:Redis服务中是否存在所述微服务的channel订阅记录,如果存在则该微服务为被订阅状态,如果不存在则该微服务为无订阅状态。
[0031]进一步地,WEB客户端与服务器端保持长链接是依靠HTML5的server

send events
机制实现的,其中,长链接为HTTP协议的链接。
[0032]第二方面,本专利技术提供一种实时推送消息的系统,所述系统包括:
[0033]WEB客户端模块,用于用户向服务器端发送订阅请求信息;也用于接收服务器端推送的消息,并渲染后展示给用户;
[0034]消息订阅推送服务模块,用于将WEB客户端的订阅请求信息存储并转发给Redis服务,并在Redis中订阅请求信息中的微服务;也用于接收Redis服务发送过来的推送消息,并转发给对应的WEB客户端;
[0035]Redis服务模块,用于接收订阅请求信息,并根据Redis服务的发布订阅机制对微服务进行订阅;也用于将微服务的推送消息转发给消息订阅推送服务;
[0036]微服务模块,至少有一个微服务,微服务为推送消息的数据源,用于向Redis服务发送推送消息。
[0037]本专利技术采用以上本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种实时推送消息的方法,其特征在于,所述方法包括以下步骤:至少一个WEB客户端与服务器端保持长链接;所述服务器端包括消息订阅推送服务、Redis服务和至少一个微服务;WEB客户端通过长链接向消息订阅推送服务发送订阅请求信息;消息订阅推送服务接收到订阅请求信息后保存,并根据订阅请求信息在Redis服务中执行订阅对应微服务的操作;微服务产生新的推送消息时,微服务将推送消息发送到Redis服务;Redis服务接收到推送消息后判断该微服务是否被订阅状态,如果是被订阅状态则将推送消息发送给消息订阅推送服务;消息订阅推送服务通过推送消息中的数据确定关联的WEB客户端,然后将推送消息通过长链接推送给对应的WEB客户端。2.根据权利要求1所述的方法,其特征在于,还包括:WEB客户端关闭后,WEB客户端与服务器端的长链接断开,消息订阅推送服务感知长链接断开后,从存储记录中查询并逻辑删除该WEB客户端对应的用户标识数据;所述微服务在Redis服务中的订阅状态包括被订阅状态和无订阅状态,以A微服务为例,具体为:消息订阅推送服务存储的订阅请求信息中至少有一条对A微服务的订阅记录,则A微服务在Redis服务中为被订阅状态,否则,消息订阅推送服务在Redis服务中执行取消A微服务的被订阅状态,此时A微服务在Redis中为无订阅状态;A微服务产生新的推送消息时,A微服务将推送消息发送到Redis服务,Redis服务接收到推送消息后,查询A微服务是否为被订阅状态,如果是被订阅状态则Redis将推送消息发送到消息订阅推送服务,消息订阅推送服务根据所述步骤S2将推送消息发到WEB客户端;如果A微服务在Redis服务中为无订阅状态,则Redis丢弃掉本条推送消息。3.根据权利要求2所述的方法,其特征在于,所述订阅请求信息携带数据包括用户标识数据和channel标识数据,以键值对形式表达,将用户标识数据做为键,channel标识数据为值,channel标识数据代表微服务的标识。4.根据权利要求3所述的方法,其特征在于,所述WEB客户端订阅过程具体为:所述WEB客户端通过长链接向消息订阅推送服务发送用户标识数据和channel标识数据;所述消息订阅推送服务接收所述WEB客户端发过来的用户标识数据和channel标识数据并以键值对形式存储在服务器端,之后消息订阅推送服务将channel标识数据订阅到Redis服务中,此时对应的微服务在Redis中为被订阅状态...

【专利技术属性】
技术研发人员:张明徐步龙
申请(专利权)人:上海中通吉网络技术有限公司
类型:发明
国别省市:

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

1