CN115665173A - 一种基于MQ的WebSocket通信方法、系统和存储介质 - Google Patents

一种基于MQ的WebSocket通信方法、系统和存储介质 Download PDF

Info

Publication number
CN115665173A
CN115665173A CN202211549568.XA CN202211549568A CN115665173A CN 115665173 A CN115665173 A CN 115665173A CN 202211549568 A CN202211549568 A CN 202211549568A CN 115665173 A CN115665173 A CN 115665173A
Authority
CN
China
Prior art keywords
websocket
client
message
session
service cluster
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.)
Granted
Application number
CN202211549568.XA
Other languages
English (en)
Other versions
CN115665173B (zh
Inventor
覃克春
刘江
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen SDMC Technology Co Ltd
Original Assignee
Shenzhen SDMC Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen SDMC Technology Co Ltd filed Critical Shenzhen SDMC Technology Co Ltd
Priority to CN202211549568.XA priority Critical patent/CN115665173B/zh
Publication of CN115665173A publication Critical patent/CN115665173A/zh
Application granted granted Critical
Publication of CN115665173B publication Critical patent/CN115665173B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明提供一种基于MQ的WebSocket通信方法、系统和存储介质,方法包括:WebSocket客户端请求WSS服务,与WebSocket服务集群握手连接;WebSocket客户端推送消息给WebSocket服务集群,由Nginx轮询WebSocket服务集群并将消息推送给第一WebSocket服务器;第一WebSocket服务器接收后发送WebSocket客户端SessionId至MQ集群;其他WebSocket服务器监听获取后,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,完成WebSocket服务集群和WebSocket的通信。

Description

一种基于MQ的WebSocket通信方法、系统和存储介质
技术领域
本发明涉及网络通信技术领域,尤其涉及一种基于MQ的WebSocket通信方法、系统和存储介质。
背景技术
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
传统服务(如微服务、应用组件等)的集群、分布式搭建方式:
(1)把用户访问IP使用哈希算法计算,定位到固定服务器节点。缺点依赖于Nginx,需要Nginx精确用户请求IP,人员资源消耗大(算法工程师、运维工程师、开发工程师),不易扩展,如果需要增加服务器,部署完成还要配置节点信息,架构复杂性,机制需要自己本身去实现。
(2)使用数据库实现,每次请求存储Session信息,安全性高,但是成本太大,会造成数据库IO读写,并发取决于数据库的性能,还需要额外维护数据库Session信息脚本。维护成本过高。
(3)使用Cookie共享,根据Cookie共享Session,但是受客户端的影响很大,安全性无法得到保障。
(4)使用Redis(非关系型数据库)缓存,解决分布式session共享问题,注意,这种方式每次请求某一台服务器把session放在缓存,然后其他服务器是去Redis拿session。安全性高、性能高、全由后端业务层实现共享。
基于上述对比,第(4)种使用Redis缓存是首选,但是前提,session支持序列化,对于WebSocket服务而言,WebSocket的客户端对象(Session)是不支持序列化(因为客户端与服务端的消息通信,需要找到对应的客户端,消息要发给对的人),这就是痛点,也就是说在集群中,无法使用Redis来进行WebSocket客户端对象(Session)的共享。只能依赖于每次请求的哈希计算,负载到对应的服务器节点。
WebSocket的客户端对象(Session),有提供Group概念,专门用来存储WebSocket客户端对象(Session),Group存在某台服务器上,由于不支持序列化无法进行共享。
发明内容
为了解决上述至少一个技术问题,本发明提出了一种基于MQ的WebSocket通信方法、系统和存储介质,使用MQ解耦,由MQ异步实现WebSocket集群服务间的通信,集群各个服务器间的数据共享,解决了WebSocket客户端对象(Session)无法序列化,无法放入Redis进行共享问题。
本发明第一方面提出了一种基于MQ的WebSocket通信方法,所述方法包括:
WebSocket客户端请求WSS服务,与WebSocket服务集群握手连接;
WebSocket客户端推送消息Message给WebSocket服务集群,由Nginx轮询WebSocket服务集群并将消息Message推送给第一WebSocket服务器Server;
第一WebSocket服务器Server接收到WebSocket客户端的消息Message,发送WebSocket客户端SessionId至MQ集群;
WebSocket服务集群中的其他WebSocket服务器Server监听获取到WebSocket客户端SessionId后,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,即可完成WebSocket服务集群和WebSocket的通信。
本方案中,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,具体包括:
在WebSocket客户端与WebSocket服务集群握手连接成功后,根据WebSocket客户端请求指向的WebSocket服务器Server,将 WebSocket客户端对象Session存储在指向的WebSocket服务器Server上;
其他WebSocket服务器Server根据监听获取的WebSocket客户端SessionId,从指向的WebSocket服务器Server中查询获取对应的WebSocket客户端对象Session,实现WebSocket客户端对象Session在WebSocket服务集群中的共享。
本方案中,在完成WebSocket服务集群和WebSocket的通信之后,所述方法还包括:
由WebSocket客户端断开与指向的WebSocket服务器Server的连接;
触发断开连接回调,由指向的WebSocket服务器Server发送WebSocket客户端SessionId至MQ集群;
WebSocket服务集群中的其他WebSocket服务器Server监听获取WebSocket客户端SessionId后,通过WebSocket客户端SessionId查询获取本地存储的WebSocket客户端对象Session并进行销毁。
本方案中,WebSocket客户端推送消息Message给WebSocket服务集群,具体包括:
预设时间段内有多个WebSocket客户端推送消息Message给WebSocket服务集群;
分别获取多个消息Message的参数信息,所述参数信息包括推送时间、客户端属性信息;
将多个消息Message的参数信息按照预设算法进行计算,得出多个消息Message的处理顺序;
按照多个消息Message的处理顺序依次推送消息Message给WebSocket服务集群。
本方案中,将多个消息Message的参数信息按照预设算法进行计算,得出多个消息Message的处理顺序,具体包括:
预设多个消息Message的数量为m;
将每条消息Message的推送时间与其他消息Message的推送时间逐一进行比对,如果前者的推送时间先于后者,则对前者消息Message的推送时间项加1/m;
将每条消息Message的客户端属性信息与其他消息Message的客户端属性信息逐一进行比对,如果前者的客户端属性级别高于后者,则对前者消息Message的客户端属性项加1/m;
待m个消息Message均完成相互比对后,则统计每个消息Message的推送时间项的第一累加值和客户端属性项的第二累加值;
预设推送时间和客户端属性对多个消息Message排序具有不同的权重因子;
基于每个消息Message,将其第一累加值乘以推送时间的权重因子,得到第一数值,并将其第二累加值乘以客户端属性的权重因子,得到第二数值,将第一数值与第二数值进行相加,计算得到每个消息Message的排序值;
根据排序值的高低,将m个消息Message进行排序,即得到多个消息Message的处理顺序。
本方案中,在WebSocket客户端推送消息Message给WebSocket服务集群之后,所述方法还包括:
由消息健康评估模型对消息Message进行评估计算,得到健康值;
判断所述健康值是否大于第一预设阈值,如果是,则允许WebSocket服务集群对消息Message进行处理,如果否,终止WebSocket服务集群对消息Message进行处理。
本发明第二方面还提出一种基于MQ的WebSocket通信系统,包括WebSocket客户端、Nginx、WebSocket服务集群、MQ集群;
WebSocket客户端,需要请求WSS地址,与WebSocket服务集群进行握手连接,长连接实现实时通信;
Nginx,用于反向代理;
WebSocket服务集群,实现业务逻辑,处理WebSocket客户端发送的消息,并给WebSocket客户端推送消息;
MQ集群,为消息中间件,用于消息解耦,管理WebSocket服务集群中的各个WebSocket服务器间的通信,实现数据共享;
WebSocket通信流程为:
WebSocket客户端请求WSS服务,与WebSocket服务集群握手连接;
WebSocket客户端推送消息Message给WebSocket服务集群,由Nginx轮询WebSocket服务集群并将消息Message推送给第一WebSocket服务器Server;
第一WebSocket服务器Server接收到WebSocket客户端的消息Message,发送WebSocket客户端SessionId至MQ集群;
WebSocket服务集群中的其他WebSocket服务器Server监听获取到WebSocket客户端SessionId后,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,即可完成WebSocket服务集群和WebSocket的通信。
本方案中,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,具体包括:
在WebSocket客户端与WebSocket服务集群握手连接成功后,根据WebSocket客户端请求指向的WebSocket服务器Server,将 WebSocket客户端对象Session存储在指向的WebSocket服务器Server上;
其他WebSocket服务器Server根据监听获取的WebSocket客户端SessionId,从指向的WebSocket服务器Server中查询获取对应的WebSocket客户端对象Session,实现WebSocket客户端对象Session在WebSocket服务集群中的共享。
本方案中,在完成WebSocket服务集群和WebSocket的通信之后,WebSocket通信流程还包括:
由WebSocket客户端断开与指向的WebSocket服务器Server的连接;
触发断开连接回调,由指向的WebSocket服务器Server发送WebSocket客户端SessionId至MQ集群;
WebSocket服务集群中的其他WebSocket服务器Server监听获取WebSocket客户端SessionId后,通过WebSocket客户端SessionId查询获取本地存储的WebSocket客户端对象Session并进行销毁。
本发明第三方面还提出一种计算机可读存储介质,所述计算机可读存储介质中包括一种基于MQ的WebSocket通信方法程序,所述基于MQ的WebSocket通信方法程序被处理器执行时,实现如上述的一种基于MQ的WebSocket通信方法的步骤。
本发明提出的一种基于MQ的WebSocket通信方法、系统和存储介质,使用MQ进行解耦,解决分布式、集群WebSocket客户端(Session)共享问题,所有WebSocket客户端发送的Message都需要经过MQ,把客户端Id(SessionId)存到MQ中,由MQ通知WebSocket服务集群,WebSocket服务集群根据MQ消息中SessionId取到WebSocket客户端对象进行消息推送。
本发明由MQ异步实现WebSocket集群服务间的通信,集群各个服务器间的数据共享,解决了WebSocket客户端(Session)无法序列化,无法放入Redis进行共享问题。相对于哈希计算方式而言,节约了人员资源、服务扩展节省了配置相关的程序、不用工作人员本身去实现负载均衡的逻辑。
本发明的附加方面和优点将在下面的描述部分中给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
图1示出了本发明一种基于MQ的WebSocket通信方法的流程图;
图2示出了本发明基于MQ的WebSocket集群、分布式部署的架构图;
图3示出了本发明一种基于MQ的WebSocket通信系统的框图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
图1示出了本发明一种基于MQ的WebSocket通信方法的流程图。
如图1所示,本发明第一方面提出一种基于MQ的WebSocket通信方法,所述方法包括:
S102,WebSocket客户端请求WSS服务,与WebSocket服务集群握手连接;
S104,WebSocket客户端推送消息Message给WebSocket服务集群,由Nginx轮询WebSocket服务集群并将消息Message推送给第一WebSocket服务器Server;
S106,第一WebSocket服务器Server接收到WebSocket客户端的消息Message,发送WebSocket客户端SessionId至MQ集群;
S108,WebSocket服务集群中的其他WebSocket服务器Server监听获取到WebSocket客户端SessionId后,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,即可完成WebSocket服务集群和WebSocket的通信。
连接成功后,请求指向哪台WebSocket服务器Server,WebSocket客户端对象Session就会存在哪台WebSocket服务器Server上。WebSocket客户端对象Session通过WebSocket客户端SessionId(WebSocket客户端Id)获取。有可能Message推送到Server1或者Server2,有可能WebSocket客户端并不存在该服务器上。在此之前部署集群时,每个WebSocket服务器Server都在监听MQ消息,任意一个WebSocket服务器Server发送WebSocket客户端SessionId至MQ集群,其余WebSocket服务器Server都能收到消息。
本发明使用MQ进行解耦,解决分布式、集群WebSocket客户端(Session)共享问题,所有WebSocket客户端发送的Message都需要经过MQ,把客户端Id(SessionId)存到MQ中,由MQ通知WebSocket服务集群,WebSocket服务集群根据MQ消息中SessionId取到WebSocket客户端对象进行消息推送。
本发明由MQ异步实现WebSocket集群服务间的通信,集群各个服务器间的数据共享,解决了WebSocket客户端(Session)无法序列化,无法放入Redis进行共享问题。相对于哈希计算方式而言,节约了人员资源、服务扩展节省了配置相关的程序、不用工作人员本身去实现负载均衡的逻辑。
MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。
如图2所示,通过架构图可以看到,针对于数据共享问题解决,根本就不需要依赖于Nginx哈希计算节点,不需要依赖Redis实现数据共享,只要保证MQ集群的高可用,即可对WebSocket客户端对象数据共享。
根据本发明的实施例,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,具体包括:
在WebSocket客户端与WebSocket服务集群握手连接成功后,根据WebSocket客户端请求指向的WebSocket服务器Server,将 WebSocket客户端对象Session存储在指向的WebSocket服务器Server上;
其他WebSocket服务器Server根据监听获取的WebSocket客户端SessionId,从指向的WebSocket服务器Server中查询获取对应的WebSocket客户端对象Session,实现WebSocket客户端对象Session在WebSocket服务集群中的共享。
根据本发明的实施例,在完成WebSocket服务集群和WebSocket的通信之后,所述方法还包括:
由WebSocket客户端断开与指向的WebSocket服务器Server的连接;
触发断开连接回调,由指向的WebSocket服务器Server发送WebSocket客户端SessionId至MQ集群;
WebSocket服务集群中的其他WebSocket服务器Server监听获取WebSocket客户端SessionId后,通过WebSocket客户端SessionId查询获取本地存储的WebSocket客户端对象Session并进行销毁。
在WebSocket客户端断开连接后,本发明通过SessionId获取WebSocket客户端对象Session进行销毁,有效节省资源占用。
根据本发明的实施例,WebSocket客户端推送消息Message给WebSocket服务集群,具体包括:
预设时间段内有多个WebSocket客户端推送消息Message给WebSocket服务集群;
分别获取多个消息Message的参数信息,所述参数信息包括推送时间、客户端属性信息;
将多个消息Message的参数信息按照预设算法进行计算,得出多个消息Message的处理顺序;
按照多个消息Message的处理顺序依次推送消息Message给WebSocket服务集群。
需要说明的是,忙时,可能有多个WebSocket客户端进行推送消息Message,此时为了更加合理安排多个消息Message的处理顺序,本发明则按照预设算法进行比对计算,从而得到合适的处理顺序,稍后即可按照合适的处理顺序由Nginx推送消息Message给WebSocket服务集群,从而合理应对忙时多个WebSocket客户端同时发出的WebSocket请求。
根据本发明的实施例,将多个消息Message的参数信息按照预设算法进行计算,得出多个消息Message的处理顺序,具体包括:
预设多个消息Message的数量为m;
将每条消息Message的推送时间与其他消息Message的推送时间逐一进行比对,如果前者的推送时间先于后者,则对前者消息Message的推送时间项加1/m;
将每条消息Message的客户端属性信息与其他消息Message的客户端属性信息逐一进行比对,如果前者的客户端属性级别高于后者,则对前者消息Message的客户端属性项加1/m;
待m个消息Message均完成相互比对后,则统计每个消息Message的推送时间项的第一累加值和客户端属性项的第二累加值;
预设推送时间和客户端属性对多个消息Message排序具有不同的权重因子;
基于每个消息Message,将其第一累加值乘以推送时间的权重因子,得到第一数值,并将其第二累加值乘以客户端属性的权重因子,得到第二数值,将第一数值与第二数值进行相加,计算得到每个消息Message的排序值;
根据排序值的高低,将m个消息Message进行排序,即得到多个消息Message的处理顺序。
可以理解,本发明结合推送时间和客户端属性进行综合评价多个消息Message的处理顺序,例如,有的客户端级别较高,如VIP,则此时需要优先处理,但也不能完全按照客户端级别进行排序,还需要结合每个客户端的推送时间进行综合评价,从而便于得到更加合理的排序顺序。在排序完成后,由Nginx按照排序将各个消息Message轮询推送对应的WebSocket服务器。
根据本发明的实施例,在WebSocket客户端推送消息Message给WebSocket服务集群之后,所述方法还包括:
由消息健康评估模型对消息Message进行评估计算,得到健康值;
判断所述健康值是否大于第一预设阈值,如果是,则允许WebSocket服务集群对消息Message进行处理,如果否,终止WebSocket服务集群对消息Message进行处理。
可以理解,本发明通过消息健康评估模型对推送的消息Message进行健康值评估计算,从而对敏感、不安全的消息Message进行屏蔽,确保WebSocket服务集群环境的安全性。
根据本发明的具体实时例,在由消息健康评估模型对消息Message进行评估计算,得到健康值之后,所述方法还包括:
获取多个历史消息推送数据,每个历史消息推送数据至少包括对应的历史环境信息、历史推送消息、基于历史推送消息的人工评估健康值;
获取当前环境信息,基于当前环境信息进行特征计算,得到当前环境特征;
基于每个历史消息推送数据的历史环境信息进行特征计算,得到每个历史消息推送数据的历史环境特征;
将当前环境特征与多个历史环境特征逐一进行相似度比对,并筛选出相似度大于第二预设阈值的历史消息推送数据,并置入数据库;
将数据库中每个历史消息推送数据的历史推送消息,通过消息健康评估模型进行计算,得到每个历史推送消息的模型预测健康值;
将数据库中每个历史消息推送数据的历史推送消息的人工评估健康值减去对应的模型预测健康值,得到健康值差值;
对数据库中所有历史消息推送数据的健康值差值进行平均化计算,得到健康值修正值;
在得到的健康值基础上,加上健康值修正值,得到修正后的健康值。
可以理解,由于不同环境时期对信息健康值评价程度不同(如敏感时期对信息的过滤程度较高,相对健康值偏低)。本发明则基于历史数据中的人工评估健康值与模型预测健康值进行计算健康值差值,从而便于对当前的健康值进行修正,得到更加准确的健康值,避免模型预测失准的问题。
根据本发明的具体实施例,在WebSocket服务集群中的其他WebSocket服务器Server监听获取WebSocket客户端SessionId之后,所述方法还包括:
其他WebSocket服务器Server自从监听获取WebSocket客户端SessionId后进行计时,
判断超过第三预设阈值时间未监听到相同的WebSocket客户端SessionId时,则销毁本地存储的WebSocket客户端对象Session;
其中第三预设阈值的获取方式为:
获取WebSocket客户端断线重连的大数据信息,由神经网络模型基于WebSocket客户端断线重连的大数据信息评估预测出断线重连时间间隔;
将断线重连时间间隔乘以预设倍数k的乘积作为第三预设阈值。
优选的,k等于1.2、1.3、1.4等,但不限于此。
图3示出了本发明一种基于MQ的WebSocket通信系统的框图。
如图3所示,本发明第二方面还提出一种基于MQ的WebSocket通信系统,包括WebSocket客户端、Nginx、WebSocket服务集群、MQ集群;
WebSocket客户端,需要请求WSS地址,与WebSocket服务集群进行握手连接,长连接实现实时通信;
Nginx,用于反向代理;
WebSocket服务集群,实现业务逻辑,处理WebSocket客户端发送的消息,并给WebSocket客户端推送消息;
MQ集群,为消息中间件,用于消息解耦,管理WebSocket服务集群中的各个WebSocket服务器间的通信,实现数据共享;
WebSocket通信流程为:
WebSocket客户端请求WSS服务,与WebSocket服务集群握手连接;
WebSocket客户端推送消息Message给WebSocket服务集群,由Nginx轮询WebSocket服务集群并将消息Message推送给第一WebSocket服务器Server;
第一WebSocket服务器Server接收到WebSocket客户端的消息Message,发送WebSocket客户端SessionId至MQ集群;
WebSocket服务集群中的其他WebSocket服务器Server监听获取到WebSocket客户端SessionId后,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,即可完成WebSocket服务集群和WebSocket的通信。
根据本发明的实施例,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,具体包括:
在WebSocket客户端与WebSocket服务集群握手连接成功后,根据WebSocket客户端请求指向的WebSocket服务器Server,将 WebSocket客户端对象Session存储在指向的WebSocket服务器Server上;
其他WebSocket服务器Server根据监听获取的WebSocket客户端SessionId,从指向的WebSocket服务器Server中查询获取对应的WebSocket客户端对象Session,实现WebSocket客户端对象Session在WebSocket服务集群中的共享。
根据本发明的实施例,在完成WebSocket服务集群和WebSocket的通信之后,WebSocket通信流程还包括:
由WebSocket客户端断开与指向的WebSocket服务器Server的连接;
触发断开连接回调,由指向的WebSocket服务器Server发送WebSocket客户端SessionId至MQ集群;
WebSocket服务集群中的其他WebSocket服务器Server监听获取WebSocket客户端SessionId后,通过WebSocket客户端SessionId查询获取本地存储的WebSocket客户端对象Session并进行销毁。
本发明第三方面还提出一种计算机可读存储介质,所述计算机可读存储介质中包括一种基于MQ的WebSocket通信方法程序,所述基于MQ的WebSocket通信方法程序被处理器执行时,实现如上述的一种基于MQ的WebSocket通信方法的步骤。
越来越多的互联网公司使用WebSocket来实现业务,WebSocket连接数过高,单机部署已无法满足,只能使用集群部署,但是WebSocket客户端对象无法序列化是一个大痛点,传统的Redis实现Session共享需要建立在可序列化的基础上。
本发明解决WebSocket客户端对象无法序列化导致Session无法共享问题。节省人力资源,无需算法工程师、开发工程师,只需提供软件包部署即可。同时,易于扩展,因为已经使用MQ进行解耦,服务直接横向扩展,MQ也支持集群,实现高可用。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (10)

1.一种基于MQ的WebSocket通信方法,其特征在于,所述方法包括:
WebSocket客户端请求WSS服务,与WebSocket服务集群握手连接;
WebSocket客户端推送消息Message给WebSocket服务集群,由Nginx轮询WebSocket服务集群并将消息Message推送给第一WebSocket服务器Server;
第一WebSocket服务器Server接收到WebSocket客户端的消息Message,发送WebSocket客户端SessionId至MQ集群;
WebSocket服务集群中的其他WebSocket服务器Server监听获取到WebSocket客户端SessionId后,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,即可完成WebSocket服务集群和WebSocket的通信。
2.根据权利要求1所述的一种基于MQ的WebSocket通信方法,其特征在于,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,具体包括:
在WebSocket客户端与WebSocket服务集群握手连接成功后,根据WebSocket客户端请求指向的WebSocket服务器Server,将 WebSocket客户端对象Session存储在指向的WebSocket服务器Server上;
其他WebSocket服务器Server根据监听获取的WebSocket客户端SessionId,从指向的WebSocket服务器Server中查询获取对应的WebSocket客户端对象Session,实现WebSocket客户端对象Session在WebSocket服务集群中的共享。
3.根据权利要求2所述的一种基于MQ的WebSocket通信方法,其特征在于,在完成WebSocket服务集群和WebSocket的通信之后,所述方法还包括:
由WebSocket客户端断开与指向的WebSocket服务器Server的连接;
触发断开连接回调,由指向的WebSocket服务器Server发送WebSocket客户端SessionId至MQ集群;
WebSocket服务集群中的其他WebSocket服务器Server监听获取WebSocket客户端SessionId后,通过WebSocket客户端SessionId查询获取本地存储的WebSocket客户端对象Session并进行销毁。
4.根据权利要求1所述的一种基于MQ的WebSocket通信方法,其特征在于,WebSocket客户端推送消息Message给WebSocket服务集群,具体包括:
预设时间段内有多个WebSocket客户端推送消息Message给WebSocket服务集群;
分别获取多个消息Message的参数信息,所述参数信息包括推送时间、客户端属性信息;
将多个消息Message的参数信息按照预设算法进行计算,得出多个消息Message的处理顺序;
按照多个消息Message的处理顺序依次推送消息Message给WebSocket服务集群。
5.根据权利要求4所述的一种基于MQ的WebSocket通信方法,其特征在于,将多个消息Message的参数信息按照预设算法进行计算,得出多个消息Message的处理顺序,具体包括:
预设多个消息Message的数量为m;
将每条消息Message的推送时间与其他消息Message的推送时间逐一进行比对,如果前者的推送时间先于后者,则对前者消息Message的推送时间项加1/m;
将每条消息Message的客户端属性信息与其他消息Message的客户端属性信息逐一进行比对,如果前者的客户端属性级别高于后者,则对前者消息Message的客户端属性项加1/m;
待m个消息Message均完成相互比对后,则统计每个消息Message的推送时间项的第一累加值和客户端属性项的第二累加值;
预设推送时间和客户端属性对多个消息Message排序具有不同的权重因子;
基于每个消息Message,将其第一累加值乘以推送时间的权重因子,得到第一数值,并将其第二累加值乘以客户端属性的权重因子,得到第二数值,将第一数值与第二数值进行相加,计算得到每个消息Message的排序值;
根据排序值的高低,将m个消息Message进行排序,即得到多个消息Message的处理顺序。
6.根据权利要求1所述的一种基于MQ的WebSocket通信方法,其特征在于,在WebSocket客户端推送消息Message给WebSocket服务集群之后,所述方法还包括:
由消息健康评估模型对消息Message进行评估计算,得到健康值;
判断所述健康值是否大于第一预设阈值,如果是,则允许WebSocket服务集群对消息Message进行处理,如果否,终止WebSocket服务集群对消息Message进行处理。
7.一种基于MQ的WebSocket通信系统,其特征在于,包括WebSocket客户端、Nginx、WebSocket服务集群、MQ集群;
WebSocket客户端,需要请求WSS地址,与WebSocket服务集群进行握手连接,长连接实现实时通信;
Nginx,用于反向代理;
WebSocket服务集群,实现业务逻辑,处理WebSocket客户端发送的消息,并给WebSocket客户端推送消息;
MQ集群,为消息中间件,用于消息解耦,管理WebSocket服务集群中的各个WebSocket服务器间的通信,实现数据共享;
WebSocket通信流程为:
WebSocket客户端请求WSS服务,与WebSocket服务集群握手连接;
WebSocket客户端推送消息Message给WebSocket服务集群,由Nginx轮询WebSocket服务集群并将消息Message推送给第一WebSocket服务器Server;
第一WebSocket服务器Server接收到WebSocket客户端的消息Message,发送WebSocket客户端SessionId至MQ集群;
WebSocket服务集群中的其他WebSocket服务器Server监听获取到WebSocket客户端SessionId后,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,即可完成WebSocket服务集群和WebSocket的通信。
8.根据权利要求7所述的一种基于MQ的WebSocket通信系统,其特征在于,根据WebSocket客户端SessionId获取对应的WebSocket客户端对象Session,具体包括:
在WebSocket客户端与WebSocket服务集群握手连接成功后,根据WebSocket客户端请求指向的WebSocket服务器Server,将 WebSocket客户端对象Session存储在指向的WebSocket服务器Server上;
其他WebSocket服务器Server根据监听获取的WebSocket客户端SessionId,从指向的WebSocket服务器Server中查询获取对应的WebSocket客户端对象Session,实现WebSocket客户端对象Session在WebSocket服务集群中的共享。
9.根据权利要求8所述的一种基于MQ的WebSocket通信系统,其特征在于,在完成WebSocket服务集群和WebSocket的通信之后,WebSocket通信流程还包括:
由WebSocket客户端断开与指向的WebSocket服务器Server的连接;
触发断开连接回调,由指向的WebSocket服务器Server发送WebSocket客户端SessionId至MQ集群;
WebSocket服务集群中的其他WebSocket服务器Server监听获取WebSocket客户端SessionId后,通过WebSocket客户端SessionId查询获取本地存储的WebSocket客户端对象Session并进行销毁。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括一种基于MQ的WebSocket通信方法程序,所述基于MQ的WebSocket通信方法程序被处理器执行时,实现如权利要求1至6中任一项所述的一种基于MQ的WebSocket通信方法的步骤。
CN202211549568.XA 2022-12-05 2022-12-05 一种基于MQ的WebSocket通信方法、系统和存储介质 Active CN115665173B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211549568.XA CN115665173B (zh) 2022-12-05 2022-12-05 一种基于MQ的WebSocket通信方法、系统和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211549568.XA CN115665173B (zh) 2022-12-05 2022-12-05 一种基于MQ的WebSocket通信方法、系统和存储介质

Publications (2)

Publication Number Publication Date
CN115665173A true CN115665173A (zh) 2023-01-31
CN115665173B CN115665173B (zh) 2023-03-17

Family

ID=85017092

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211549568.XA Active CN115665173B (zh) 2022-12-05 2022-12-05 一种基于MQ的WebSocket通信方法、系统和存储介质

Country Status (1)

Country Link
CN (1) CN115665173B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116755905A (zh) * 2023-06-26 2023-09-15 广州三七极创网络科技有限公司 基于消息队列的数据交互方法、装置、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040236780A1 (en) * 2003-02-25 2004-11-25 Michael Blevins Systems and methods for client-side filtering of subscribed messages
US20060235970A1 (en) * 2005-04-18 2006-10-19 Cameron Bateman System and method for exposing synchronous web services as notification style web services
CN109660617A (zh) * 2018-12-18 2019-04-19 中电科华云信息技术有限公司 一种基于服务器集群的消息推送方法
CN111031058A (zh) * 2019-12-23 2020-04-17 集奥聚合(北京)人工智能科技有限公司 基于WebSocket的分布式服务器集群交互方法及装置
CN112019597A (zh) * 2020-07-27 2020-12-01 华迪计算机集团有限公司 分布式数据接收系统及数据接收方法
CN112256954A (zh) * 2020-09-08 2021-01-22 国网宁夏电力有限公司经济技术研究院 一种消息推送的处理方法及相关系统
WO2021238287A1 (zh) * 2020-05-29 2021-12-02 苏州浪潮智能科技有限公司 一种分布式系统主动推送的方法、系统、设备及介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040236780A1 (en) * 2003-02-25 2004-11-25 Michael Blevins Systems and methods for client-side filtering of subscribed messages
US20060235970A1 (en) * 2005-04-18 2006-10-19 Cameron Bateman System and method for exposing synchronous web services as notification style web services
CN109660617A (zh) * 2018-12-18 2019-04-19 中电科华云信息技术有限公司 一种基于服务器集群的消息推送方法
CN111031058A (zh) * 2019-12-23 2020-04-17 集奥聚合(北京)人工智能科技有限公司 基于WebSocket的分布式服务器集群交互方法及装置
WO2021238287A1 (zh) * 2020-05-29 2021-12-02 苏州浪潮智能科技有限公司 一种分布式系统主动推送的方法、系统、设备及介质
CN112019597A (zh) * 2020-07-27 2020-12-01 华迪计算机集团有限公司 分布式数据接收系统及数据接收方法
CN112256954A (zh) * 2020-09-08 2021-01-22 国网宁夏电力有限公司经济技术研究院 一种消息推送的处理方法及相关系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
杨君;徐迪;: "分布式即时通信系统的设计与实现" *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116755905A (zh) * 2023-06-26 2023-09-15 广州三七极创网络科技有限公司 基于消息队列的数据交互方法、装置、设备及存储介质
CN116755905B (zh) * 2023-06-26 2024-02-13 广州三七极创网络科技有限公司 基于消息队列的数据交互方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN115665173B (zh) 2023-03-17

Similar Documents

Publication Publication Date Title
US9369521B2 (en) Naming of distributed business transactions
Chaczko et al. Availability and load balancing in cloud computing
CN112231075B (zh) 一种基于云服务的服务器集群负载均衡控制方法及系统
CN104601702B (zh) 集群远程过程调用方法及系统
US9501326B2 (en) Processing control system, processing control method, and processing control program
CN102281190A (zh) 负载均衡装置组网方法以及服务器、客户端接入方法
CN110471749B (zh) 任务处理方法、装置、计算机可读存储介质和计算机设备
CN109783151B (zh) 规则变更的方法和装置
CN115665173B (zh) 一种基于MQ的WebSocket通信方法、系统和存储介质
CN112866394B (zh) 一种负载均衡方法、装置、系统、计算机设备和存储介质
CN110809060A (zh) 一种应用服务器集群的监控系统及监控方法
CN109769029A (zh) 基于用电信息采集系统的通信连接方法及终端设备
CN111510325A (zh) 报警信息推送方法、服务器、客户端及系统
CN101917406A (zh) 数据传输方法及数据传输系统
CN114490100B (zh) 一种消息队列遥测传输负载均衡方法、装置及服务器
CN110825505B (zh) 任务调度方法、装置、计算机设备及存储介质
CN107547643A (zh) 一种负载分担方法和装置
CN110336884B (zh) 服务器集群更新方法和装置
CN116743836A (zh) 长连接通信链路建立方法及其装置、电子设备及存储介质
CN114143263B (zh) 一种对用户请求进行限流的方法、设备及介质
CN104509071B (zh) 处理请求
CN116107741A (zh) 一种负载均衡调度方法、系统、电子设备及可读存储介质
CN106210120A (zh) 一种服务器的推荐方法及其装置
CN113538081A (zh) 商城订单系统及其实现资源自适应调度的处理方法
CN111797169A (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