CN109361770A - 基于WebSocket和消息队列实现双向实时通信的系统及方法 - Google Patents
基于WebSocket和消息队列实现双向实时通信的系统及方法 Download PDFInfo
- Publication number
- CN109361770A CN109361770A CN201811512461.1A CN201811512461A CN109361770A CN 109361770 A CN109361770 A CN 109361770A CN 201811512461 A CN201811512461 A CN 201811512461A CN 109361770 A CN109361770 A CN 109361770A
- Authority
- CN
- China
- Prior art keywords
- message
- server
- client
- websocket
- index
- 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.)
- Pending
Links
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/14—Session management
- H04L67/141—Setup of application sessions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/1066—Session management
- H04L65/1069—Session establishment or de-establishment
-
- 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/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Business, Economics & Management (AREA)
- General Business, Economics & Management (AREA)
- Multimedia (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种基于WebSocket和消息队列实现双向实时通信的系统及方法,涉及通信技术领域,旨在解决现有的采用WebSocket协议实现实时通信的方案容易导致后端服务和数据库需要承受大量并发压力的问题。其技术方案要点是,系统包括服务端和客户端,服务端包括用于为与服务端连接的客户端建立唯一标识的标记模块和用于根据标记模块建立的唯一标识建立用于定位客户端在WebSocket服务中的位置的索引的索引模块;其中,服务端以消息队列消费者的方式从订阅的消息队列中接收消息生产者发布的消息,并按照索引将接收的消息推送给客户端。服务端以被动的方式接收消息后再推送给相应客户端,解决了轮询导致的性能问题。
Description
技术领域
本发明涉及通信技术领域,尤其是涉及一种基于WebSocket和消息队列实现双向实时通信的系统及方法。
背景技术
目前,互联网上应用最为广泛的一种网络协议为超文本传输协议(HTTP,HyperText Transfer Protocol)。HTTP的工作原理为,客户端不停的向服务器发送Ajax请求(即让客户端隔个几秒就发送一次请求,询问服务器是否有新信息),服务器接到请求后马上返回响应信息并关闭连接。此时,客户端与服务端的连接终止,若客户端未获取到期望的数据则需重复上述步骤再次建立连接。
虽然通过HTTP协议客户端也能尽快(取决于轮询间隔)获取最新的数据,但HTTP协议也存在着以下问题:当轮询的间隔时间过长时,会导致客户端不能及时的接收到更新的数据;当轮询的间隔时间过短时,则会导致服务器在短时间内接收到大量的请求,增加服务器的并发压力。而WebSocket协议的出现就为解决上述问题提供了途径。
WebSocket协议是基于TCP的一种新的网络协议。相对于HTTP这种非持久的协议来说,Websocket是一个持久化的协议,它实现了浏览器与服务器全双工(full-duplex)通信,允许服务器主动发送信息给客户端。当客户端和服务器之间建立WebSocket 连接后,任一方都可以通过建立的连接将数据推送到另一端。WebSocket 只需要建立一次连接,就可以一直保持连接状态,在客户端或服务器中断连接前,不需要客户端和服务器重新发起连接请求。
由上述可知,采用WebSocket协议实现实时通信的技术已经较为成熟,但是,其还具有以下缺陷:当WebSocket连接建立后,WebSocket还需要以轮询后端服务接口或者数据库服务器的方式来获取消息,后端服务接口或者数据库服务器仍然需要承受大量的并发压力,容易导致性能问题。
发明内容
本发明的目的是提供一种基于WebSocket和消息队列实现双向实时通信的系统及方法。
发明目的一是:提供一种基于WebSocket和消息队列实现双向实时通信的系统,其优点是服务端以被动的方式接收消息,解决了轮询导致的性能问题;
发明目的二是:提供一种基于WebSocket和消息队列实现双向实时通信的方法,其优点是服务端以被动的方式接收消息,保证了系统性能,且解决了WebSocket服务以集群的方式部署时无法定位客户端在WebSocket服务中的位置的问题。
本发明的上述发明目的一是通过以下技术方案得以实现的:
一种基于WebSocket和消息队列实现双向实时通信的系统,包括用于建立WebSocket服务的服务端和用于向所述服务端发起WebSocket连接的客户端,所述服务端包括:
标记模块,其用于为与所述服务端连接的所述客户端建立唯一标识;
索引模块,其用于根据所述标记模块建立的唯一标识建立用于定位所述客户端在WebSocket服务中的位置的索引;
其中,所述服务端以消息队列消费者的方式从订阅的消息队列中接收消息生产者发布的消息,并按照所述索引将接收的所述消息推送给所述客户端。
通过采用上述技术方案,服务端会为连接的每一个客户端均建立一个唯一标识,并且会按照唯一标识为对应的客户端建立用于定位这个客户端在WebSocket服务中的位置的索引。服务端以消息队列消费者的方式被动的从消息队列中接收消息后,再根据建立的索引推送给相应的客户端,有效避免了后端服务接口或数据库服务器需要承受大量并发压力的情况,解决了轮询导致的性能问题。
本发明进一步设置为:所述服务端还包括:
检测模块,其用于检测所述客户端与所述服务端之间的连接是否中断;
触发模块,其用于当所述检测模块检测到所述客户端与所述服务端之间的连接中断时,删除所述索引模块建立的相应的索引。
通过采用上述技术方案,检测模块能够实时检测客户端与服务端之间的连接状态,当触发模块检测到客户端与服务端之间的连接中断时,能够及时的删除相应的索引,从而节省服务器资源,使服务器保持较好的性能。
本发明进一步设置为:所述触发模块包括:
判断单元,其用于当所述检测模块检测到所述客户端与所述服务端之间的连接中断时,检测所述连接中断的中断类型;所述中断类型包括服务端主动断开和客户端主动断开;
删除单元,其用于当所述判断单元检测到所述中断类型为服务端主动断开时,直接删除所述索引模块建立的相应的索引;
计时单元,其用于当所述判断单元检测到所述中断类型为客户端主动断开时,进行设定时间的定时;
其中,若所述判断单元检测到所述客户端在所述设定时间内未重新与所述服务端连接,则向所述删除单元发送删除相应索引的控制信号。
通过采用上述技术方案,当客户端与服务端之间连接中断的中断类型为服务端主动断开时,因为服务端主动断开连接代表着阶段性任务完成(如用户退出登录),此时客户端短时间内不会再发起连接,所以删除单元会直接删除相应的索引,以达到节省服务器资源的目的。当客户端与服务端之间连接中断的中断类型为客户端主动断开时,因为可能是网络波动或者客户端应用程序切换至后台而导致的,用户在短时间内很可能会再次发起连接,所以不需要立即删除索引,以免发生频繁的创建、删除索引操作。而对于客户端与服务端断开连接后长时间(超过十分钟)未重新连接的索引,由后台定时任务执行删除操作以节省服务器资源。
本发明进一步设置为:所述消息生产者包括识别模块和分类数据集,所述分类数据集包括至少一种消息类型对照信息,所述至少一种消息类型对照信息中的每一种消息类型对照信息均对应一种消息队列;所述识别模块用于检测所述消息的消息类型信息并判断所述分类数据集中是否具有与所述消息类型信息相同的消息类型对照信息;
其中,若所述识别模块判断所述分类数据集中具有与所述消息类型信息相同的消息类型对照信息时,所述消息生产者根据所述消息类型对照信息将所述消息发布至对应的消息队列中。
通过采用上述技术方案,不同消息类型的消息对消息队列组件的要求不同,例如,“订单、支付”类消息就要求及时性,“检索、浏览”类消息就要求可靠性,“日志、用户轨迹”类消息就要求大并发性能强。因此,按照消息类型的不同选择相应的消息队列组件(如:具有高速和异步的特性、适用于“订单、支付”类消息的ZeroMQ,具有稳定和可靠的特性、适用于“检索、浏览”类消息的RabbitMQ,具有高吞吐和分布式的特性、适用于“日志、用户轨迹”类消息的Kafka),有助于消息的稳定传输,并提高消息传输的质量和性能。
本发明进一步设置为:所述分类数据集还包括所述至少一种消息类型对照信息中的每一种消息类型对照信息所对应的消息被消息生产者发布至对应的消息队列中的优先级,所述消息生产者优先将优先级最高的所述消息发布到对应的消息队列中。
通过采用上述技术方案,当消息生产者需要同时发布多种消息时,消息生产者会优先将优先级最高的消息发布到对应的消息队列中。对于多个同一类型的消息,消息生产者会按照时间由早到晚的顺序依次将这多个消息发布到对应的消息队列中,节省了系统资源,利于使系统保证稳定的性能。
本发明的上述发明目的二是通过以下技术方案得以实现的:
一种基于WebSocket和消息队列实现双向实时通信的方法,所述基于WebSocket和消息队列实现双向实时通信的方法基于上述的基于WebSocket和消息队列实现双向实时通信的系统,包括:
通过所述服务端建立WebSocket服务,所述服务端以集群的方式部署;
建立所述客户端与所述服务端之间的WebSocket连接;
通过所述服务端为连接的所述客户端建立唯一标识;
根据所述唯一标识建立用于定位所述客户端在WebSocket服务中的位置的索引;
通过所述服务端从订阅的消息队列中接收消息生产者发布的消息;
通过所述服务端和所述索引将接收的所述消息推送给所述客户端。
通过采用上述技术方案,当客户端与服务端之间建立WebSocket连接后,服务端会为客户端建立一个唯一标识,并根据该唯一标识建立相应的索引,该索引可以定位客户端在WebSocket服务中的位置,故而在服务端从订阅的消息队列中接收到相应的消息(消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等)后,能够快、准确的将该消息推送给相应的客户端。另外,在传统的WebSocket服务中,当WebSocket服务以集群的方式部署时,无法通过被动的方式来接收消息,这主要是因为服务器众多,消息发送方无法定位客户端在WebSocket服务中的位置,而本申请通过唯一标识和索引的方案解决了这一问题,具有较广的适用性。
本发明进一步设置为:还包括以下步骤:
检测所述客户端与所述服务端之间的连接状态;
若检测到所述客户端与所述服务端之间的连接中断,则删除对应的所述索引。
通过采用上述技术方案,能够实时检测客户端与服务端之间的连接是否中断。若检测到客户端与服务端之间的连接中断,则删除相应的索引,从而达到了节省服务器资源的目的。
本发明进一步设置为:若检测到所述客户端与所述服务端之间的连接中断,则删除对应的所述索引,包括:
若检测到所述客户端与所述服务端之间的连接中断,则判断中断类型,所述中断类型包括服务端主动断开和客户端主动断开;
若判断所述中断类型为服务端主动断开,则删除对应的所述索引;
若判断所述中断类型为客户端主动断开,则进行设定时间的延时维持;
若所述客户端在所述设定时间内未重新与所述服务端连接,则删除对应的所述索引。
通过采用上述技术方案,服务端主动断开连接代表着阶段性任务已经完成(如用户退出登录),此时,客户端短时间内不会再发起连接,所以会直接删除索引,以节省服务器资源。当客户端主动断开连接时,可能是由于网络波动或者客户端的应用程序切换至后台所导致,用户在短时间内很可能会再次发起连接,所以不需要立即删除索引,以免发生频繁的创建、删除索引,但是,对于断开后长时间(超过十分钟)未重新连接的索引,由后台定时任务执行删除操作,以节省服务器资源,保证服务器性能。
本发明进一步设置为:所述消息按照类型的不同被划分为至少一种,至少一种所述消息中的每一种所述消息均对应一种消息队列;所述消息生产者根据所述消息的类型将所述消息发布至对应的消息队列中。
通过采用上述技术方案,消息的类型包括“订单、支付”类、“检索、浏览”类和“日志、用户轨迹”类。由于不同消息类型的消息对消息队列组件的要求不同,例如,“订单、支付”类消息就要求及时性,“检索、浏览”类消息就要求可靠性,“日志、用户轨迹”类消息就要求大并发性能强。所以,按照消息类型的不同选择相应的消息队列组件(如:具有高速和异步的特性、适用于“订单、支付”类消息的ZeroMQ,具有稳定和可靠的特性、适用于“检索、浏览”类消息的RabbitMQ,具有高吞吐和分布式的特性、适用于“日志、用户轨迹”类消息的Kafka),有助于消息的稳定传输,并提高消息传输的质量和性能。
本发明进一步设置为:至少一种所述消息中的每一种所述消息均对应有被所述消息生产者发布至对应的消息队列中的优先级,所述消息生产者优先将优先级最高的所述消息发布到对应的消息队列中。
通过采用上述技术方案,在WebSocket服务中,消息生产者往往需要发布多个消息,而为了保证消息的发布性能和效率,消息生产者会优先将优先级最高的消息发布到对应的消息队列中。当某一类型的待发布消息有多个时,消息生产者会按照消息时间由早到晚的顺序依次将这多个消息发布到对应的消息队列中,从而达到了节省系统资源的目的,利于使系统保持稳定、高效的运转。
综上所述,本发明的有益技术效果为:
1、通过与客户端一一对应的唯一标识和索引的设置,服务端能在以被动的方式接收消息后再按照相应的索引将接收到的消息稳定、准确地推送至相应的客户端,解决了轮询导致的性能问题;
2、通过实时检测客户端与服务端之间的连接状态以及根据客户端与服务端之间连接中断的中断类型,能够判断是直接删除索引、延时删除索引或者保留索引,避免了服务端频繁创建和删除索引,节省了服务器资源也保证了服务器端的服务性能,智能化程度高;
3、通过使用多种高性能消息队列组件,能够根据消息的类型和并发自主选择合适的消息队列组件,并且能够根据消息的优先级,优先发布优先级较高的消息至对应的消息队列中,具有能够有效提高消息传输质量、保证消息传输性能的效果。
附图说明
图1是本发明实施例一示出的基于WebSocket和消息队列实现双向实时通信的系统的结构示意图;
图2是本发明实施例一示出的触发模块的结构示意图;
图3是本发明实施例二示出的基于WebSocket和消息队列实现双向实时通信的方法的流程图;
图4是本发明实施例二示出的步骤S70、步骤S71、步骤S80、步骤S90以及步骤S91的示意图。
图中,10、服务端;11、标记模块;12、索引模块;13、检测模块;14、触发模块;15、判断单元;16、删除单元;17、计时单元;20、客户端;30、识别模块;40、分类数据集。
具体实施方式
以下结合附图对本发明作进一步详细说明。
实施例一
参照图1,为本发明公开的一种基于WebSocket和消息队列实现双向实时通信的系统,包括服务端10、客户端20、识别模块30和分类数据集40。服务端10以集群的方式部署并用于建立WebSocket服务,客户端20用于向服务端10发起WebSocket连接。
参照图1,服务端10包括标记模块11和索引模块12。标记模块11用于当客户端20与服务端10连接时,为该客户端20建立唯一标识。索引模块12用于根据标记模块11建立的唯一标识建立索引,索引用于定位该客户端20在WebSocket服务中的位置。当服务端10以消息队列消费者的方式从订阅的消息队列中接收消息生产者发布的消息后,会按照索引将接收的消息推送给相应的客户端20。
参照图1,服务端10还包括检测模块13和触发模块14。检测模块13用于检测客户端20与服务端10之间的连接是否中断,触发模块14用于当检测模块13检测到客户端20与服务端10之间的连接中断时,删除索引模块12建立的相应的索引。
参照图1和图2,触发模块14包括判断单元15、删除单元16和计时单元17。判断单元15用于当检测模块13检测到客户端20与服务端10之间的连接中断时,立即检测该连接中断的中断类型,在本实施例中,中断类型包括服务端主动断开和客户端主动断开。删除单元16用于当判断单元15检测到中断类型为服务端主动断开时,直接删除索引模块12建立的相应的索引。计时单元17用于当判断单元15检测到中断类型为客户端主动断开时,进行设定时间的定时。其中,若判断单元15检测到客户端20在设定时间内未重新与服务端10连接,则向删除单元16发送删除相应索引的控制信号。具体的,在本实施例中,计时单元17计时的设定时间为10分钟。
具体的,当连接的中断类型为服务端主动断开时,代表着阶段性任务完成(如用户退出登录),客户端20在短时间内不会再发起连接,此时直接删除索引,能够节省服务器资源。当连接的中断类型为客户端主动断开连接时,可能是客户端20的网络波动或者应用程序切换至后台导致,用户在短时间内很可能会再次发起连接,所以不需要立即删除索引,以免发生频繁的创建、删除索引操作。对于断开后长时间(超过十分钟)未重新连接的客户端20的索引,由后台定时任务执行删除操作以节省服务器资源。
参照图1,分类数据集40包括至少一种消息类型对照信息,至少一种消息类型对照信息中的每一种消息类型对照信息均对应一种消息队列。识别模块30用于检测消息的消息类型信息,并判断分类数据集40中是否具有与该消息类型信息相同的消息类型对照信息。其中,若识别模块30判断分类数据集40中具有与该消息类型信息相同的消息类型对照信息,消息生产者根据消息类型对照信息对应的消息队列将该消息发布至此消息队列中。
分类数据集40还包括至少一种消息类型对照信息中的每一种消息类型对照信息所对应的消息被消息生产者发布至对应的消息队列中的优先级,消息生产者优先将优先级最高的消息发布到对应的消息队列中。
具体的,消息的消息类型包括优先级由高到低的“订单、支付”、“检索、浏览”和“日志、用户轨迹”三种,消息队列包括ZeroMQ、RabbitMQ和Kafka。其中,ZeroMQ具有高速、异步的特性,其与消息类型为“订单、支付”的消息对应;RabbitMQ具有稳定、可靠的特性,其与消息类型为“检索、浏览”的消息对应;Kafka具有高吞吐、分布式的特性,其与消息类型为“日志、用户轨迹” 的消息对应。
上述实施例的实施原理为:
当客户端20与服务端10建立连接后,标记模块11会为该客户端20建立唯一标识,此时,索引模块12会根据标记模块11建立的唯一标识为该客户端20建立对应的索引,该索引用于定位此客户端20在WebSocket服务中的位置。
消息生产者按照消息的类型将消息发布至对应的消息队列中后,服务端10以消息队列消费者的方式从相应的消息队列中接收消息。服务端10接受到消息后,会按照索引将接收的消息推送给相应的客户端20。
其中,若检测模块13检测到某一客户端20与服务端10之间的连接中断时,判断单元15会检测该连接中断的中断类型。当中断类型为服务端主动断开时,触发模块14会直接删除索引,以便节省服务器资源。当中断类型为客户端主动断开连接时,触发模块14不会立即删除索引,而是启动计时单元17的计时,对于断开后长时间(超过十分钟)未重新连接的索引,触发模块14会执行删除操作以节省服务器资源。
实施例二
参照图3,为本发明公开的一种基于WebSocket和消息队列实现双向实时通信的方法,基于WebSocket和消息队列实现双向实时通信的方法基于实施例一中的基于WebSocket和消息队列实现双向实时通信的系统,其包括以下步骤:
S10、通过服务端10建立WebSocket服务。具体的,服务端10以集群的方式部署。
S20、建立客户端20与服务端10之间的WebSocket连接。
S30、通过服务端10为连接的客户端20建立唯一标识。
S40、根据对应的唯一标识建立用于定位该客户端20在WebSocket服务中的位置的索引。
S50、通过服务端10从订阅的消息队列中接收消息生产者发布的消息。
S60、通过服务端10和索引将接收的消息推送给客户端20。
参照图4,步骤S40之后还包括以下步骤:
S70、检测客户端20与服务端10之间的连接是否中断;若检测到客户端20与服务端10之间的连接中断,则进入步骤S71;若检测到客户端20与服务端10之间的连接未中断,则继续进行步骤S70中的检测。
S71、判断中断的中断类型, 中断类型包括服务端主动断开和客户端主动断开;若判断中断类型为服务端主动断开,则进入步骤S80;若判断中断类型为客户端主动断开,则进入步骤S90。
S80、直接删除对应的索引。
S90、进行设定时间的延时维持;若客户端20在设定时间内未重新与服务端10建立连接,则进入步骤S80;若客户端20在设定时间内重新与服务端10建立连接,则进入步骤S70。具体的,延时维持的设定时间为10分钟。
需要说明的是,当连接的中断类型为服务端主动断开时,代表着阶段性任务完成(如用户退出登录),客户端20在短时间内不会再发起连接,此时直接删除索引,能够节省服务器资源。当连接的中断类型为客户端主动断开连接时,可能是客户端20的网络波动或者应用程序切换至后台导致,用户在短时间内很可能会再次发起连接,所以不需要立即删除索引,以免发生频繁的创建、删除索引操作。对于断开后长时间(超过十分钟)未重新连接的客户端20的索引,由后台定时任务执行删除操作以节省服务器资源。
在本实施例中,消息按照类型的不同被划分为至少一种,至少一种消息中的每一种消息均对应一种消息队列。消息生产者根据消息的类型将消息发布至对应的消息队列中。至少一种消息中的每一种消息均对应有被消息生产者发布至对应的消息队列中的优先级,当同时有多种消息时,消息生产者会优先将优先级最高的消息发布到对应的消息队列中。对于多个同一类型的消息,消息生产者会按照时间由早到晚的顺序依次将这多个消息发布到对应的消息队列中。
具体的,消息的类型包括优先级由高到低的“订单、支付”、“检索、浏览”和“日志、用户轨迹”三种,消息队列包括ZeroMQ、RabbitMQ和Kafka。其中,ZeroMQ具有高速、异步的特性,其与消息类型为“订单、支付”的消息对应;RabbitMQ具有稳定、可靠的特性,其与消息类型为“检索、浏览”的消息对应;Kafka具有高吞吐、分布式的特性,其与消息类型为“日志、用户轨迹” 的消息对应。
本具体实施方式的实施例均为本发明的较佳实施例,并非依此限制本发明的保护范围,故:凡依本发明的结构、形状、原理所做的等效变化,均应涵盖于本发明的保护范围之内。
Claims (10)
1.一种基于WebSocket和消息队列实现双向实时通信的系统,其特征在于,包括用于建立WebSocket服务的服务端(10)和用于向所述服务端(10)发起WebSocket连接的客户端(20),所述服务端(10)包括:
标记模块(11),其用于为与所述服务端(10)连接的所述客户端(20)建立唯一标识;
索引模块(12),其用于根据所述标记模块(11)建立的唯一标识建立用于定位所述客户端(20)在WebSocket服务中的位置的索引;
其中,所述服务端(10)以消息队列消费者的方式从订阅的消息队列中接收消息生产者发布的消息,并按照所述索引将接收的所述消息推送给所述客户端(20)。
2.根据权利要求1所述的基于WebSocket和消息队列实现双向实时通信的系统,其特征在于,所述服务端(10)还包括:
检测模块(13),其用于检测所述客户端(20)与所述服务端(10)之间的连接是否中断;
触发模块(14),其用于当所述检测模块(13)检测到所述客户端(20)与所述服务端(10)之间的连接中断时,删除所述索引模块(12)建立的相应的索引。
3.根据权利要求2所述的基于WebSocket和消息队列实现双向实时通信的系统,其特征在于,所述触发模块(14)包括:
判断单元(15),其用于当所述检测模块(13)检测到所述客户端(20)与所述服务端(10)之间的连接中断时,检测所述连接中断的中断类型;所述中断类型包括服务端主动断开和客户端主动断开;
删除单元(16),其用于当所述判断单元(15)检测到所述中断类型为服务端主动断开时,直接删除所述索引模块(12)建立的相应的索引;
计时单元(17),其用于当所述判断单元(15)检测到所述中断类型为客户端主动断开时,进行设定时间的定时;
其中,若所述判断单元(15)检测到所述客户端(20)在所述设定时间内未重新与所述服务端(10)连接,则向所述删除单元(16)发送删除相应索引的控制信号。
4.根据权利要求1所述的基于WebSocket和消息队列实现双向实时通信的系统,其特征在于,所述消息生产者包括识别模块(30)和分类数据集(40),所述分类数据集(40)包括至少一种消息类型对照信息,所述至少一种消息类型对照信息中的每一种消息类型对照信息均对应一种消息队列;所述识别模块(30)用于检测所述消息的消息类型信息并判断所述分类数据集(40)中是否具有与所述消息类型信息相同的消息类型对照信息;
其中,若所述识别模块(30)判断所述分类数据集(40)中具有与所述消息类型信息相同的消息类型对照信息时,所述消息生产者根据所述消息类型对照信息将所述消息发布至对应的消息队列中。
5.根据权利要求4所述的基于WebSocket和消息队列实现双向实时通信的系统,其特征在于,所述分类数据集(40)还包括所述至少一种消息类型对照信息中的每一种消息类型对照信息所对应的消息被消息生产者发布至对应的消息队列中的优先级,所述消息生产者优先将优先级最高的所述消息发布到对应的消息队列中。
6.一种基于WebSocket和消息队列实现双向实时通信的方法,其特征在于,所述基于WebSocket和消息队列实现双向实时通信的方法基于权利要求1中所述的基于WebSocket和消息队列实现双向实时通信的系统,包括:
通过所述服务端(10)建立WebSocket服务,所述服务端(10)以集群的方式部署;
建立所述客户端(20)与所述服务端(10)之间的WebSocket连接;
通过所述服务端(10)为连接的所述客户端(20)建立唯一标识;
根据所述唯一标识建立用于定位所述客户端(20)在WebSocket服务中的位置的索引;
通过所述服务端(10)从订阅的消息队列中接收消息生产者发布的消息;
通过所述服务端(10)和所述索引将接收的所述消息推送给所述客户端(20)。
7.根据权利要求6所述的基于WebSocket和消息队列实现双向实时通信的方法,其特征在于,还包括以下步骤:
检测所述客户端(20)与所述服务端(10)之间的连接状态;
若检测到所述客户端(20)与所述服务端(10) 之间的连接中断,则删除对应的所述索引。
8. 根据权利要求7所述的基于WebSocket和消息队列实现双向实时通信的方法,其特征在于,若检测到所述客户端(20)与所述服务端(10) 之间的连接中断,则删除对应的所述索引,包括:
若检测到所述客户端(20)与所述服务端(10) 之间的连接中断,则判断中断类型,所述中断类型包括服务端主动断开和客户端主动断开;
若判断所述中断类型为服务端主动断开,则删除对应的所述索引;
若判断所述中断类型为客户端主动断开,则进行设定时间的延时维持;
若所述客户端(20)在所述设定时间内未重新与所述服务端(10)连接,则删除对应的所述索引。
9.根据权利要求6所述的基于WebSocket和消息队列实现双向实时通信的方法,其特征在于,所述消息按照类型的不同被划分为至少一种,至少一种所述消息中的每一种所述消息均对应一种消息队列;所述消息生产者根据所述消息的类型将所述消息发布至对应的消息队列中。
10.根据权利要求9所述的基于WebSocket和消息队列实现双向实时通信的方法,其特征在于,至少一种所述消息中的每一种所述消息均对应有被所述消息生产者发布至对应的消息队列中的优先级,所述消息生产者优先将优先级最高的所述消息发布到对应的消息队列中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811512461.1A CN109361770A (zh) | 2018-12-11 | 2018-12-11 | 基于WebSocket和消息队列实现双向实时通信的系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811512461.1A CN109361770A (zh) | 2018-12-11 | 2018-12-11 | 基于WebSocket和消息队列实现双向实时通信的系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109361770A true CN109361770A (zh) | 2019-02-19 |
Family
ID=65332073
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811512461.1A Pending CN109361770A (zh) | 2018-12-11 | 2018-12-11 | 基于WebSocket和消息队列实现双向实时通信的系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109361770A (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109889454A (zh) * | 2019-02-26 | 2019-06-14 | 浪潮软件集团有限公司 | 一种微服务架构的消息推送装置及方法 |
CN110138858A (zh) * | 2019-05-14 | 2019-08-16 | 北京杰思安全科技有限公司 | 一种基于Websocket的任务管理系统及方法 |
CN110533897A (zh) * | 2019-08-22 | 2019-12-03 | 杭州电子科技大学 | 基于socket的咖啡烘焙通信方法 |
CN110730118A (zh) * | 2019-09-24 | 2020-01-24 | 北京真视通科技股份有限公司 | 消息发送方法、装置、计算机设备和存储介质 |
CN111031058A (zh) * | 2019-12-23 | 2020-04-17 | 集奥聚合(北京)人工智能科技有限公司 | 基于WebSocket的分布式服务器集群交互方法及装置 |
CN111262923A (zh) * | 2020-01-14 | 2020-06-09 | 深圳壹账通智能科技有限公司 | 数据同步方法、装置、计算机设备及存储介质 |
CN111711689A (zh) * | 2020-06-16 | 2020-09-25 | 深圳市思迪信息技术股份有限公司 | 投顾系统图文直播方法及系统、设备及存储介质 |
CN112422677A (zh) * | 2020-11-17 | 2021-02-26 | 深圳市康必达中创科技有限公司 | 一种智能数据发布方法 |
CN112565421A (zh) * | 2020-12-03 | 2021-03-26 | 创盛视联数码科技(北京)有限公司 | 信息传输方法、系统、电子设备及存储介质 |
CN112637046A (zh) * | 2020-12-18 | 2021-04-09 | 北京房天下嘉居网络技术有限公司 | 消息推送方法及路由装置 |
CN114039942A (zh) * | 2021-10-12 | 2022-02-11 | 浪潮软件科技有限公司 | 基于即时通信的税企管理方法及系统 |
CN114039961A (zh) * | 2021-10-08 | 2022-02-11 | 中移(杭州)信息技术有限公司 | 基于WebSocket的消息推送方法、设备、服务器及存储介质 |
CN114244557A (zh) * | 2021-11-09 | 2022-03-25 | 浪潮通用软件有限公司 | 基于用户特征的开发操作日志隔离方法和系统 |
CN114979238A (zh) * | 2022-05-24 | 2022-08-30 | 浪潮软件集团有限公司 | 多客户端数据实时推送方法及系统 |
CN115037753A (zh) * | 2022-06-22 | 2022-09-09 | 平安科技(深圳)有限公司 | 消息通知方法和系统 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104092767A (zh) * | 2014-07-21 | 2014-10-08 | 北京邮电大学 | 一种增加消息队列模型的发布/订阅系统及其工作方法 |
CN104378415A (zh) * | 2014-10-29 | 2015-02-25 | 中国建设银行股份有限公司 | 一种基于消息的高可用云系统和实现方法 |
CN105282245A (zh) * | 2015-09-29 | 2016-01-27 | 努比亚技术有限公司 | 跨服务器消息推送系统及方法 |
CN106713226A (zh) * | 2015-11-12 | 2017-05-24 | 卓望数码技术(深圳)有限公司 | 一种用于分布式系统的远程过程调用处理方法和系统 |
US20170214973A1 (en) * | 2014-05-28 | 2017-07-27 | I-Spy Digital Limited | Interactive display telecommunication method and system |
CN107197015A (zh) * | 2017-05-23 | 2017-09-22 | 阿里巴巴集团控股有限公司 | 一种基于消息队列系统的消息处理方法和装置 |
CN107248978A (zh) * | 2017-05-27 | 2017-10-13 | 武汉票据交易中心有限公司 | 一种消息监听处理方法及系统 |
CN107911462A (zh) * | 2017-11-27 | 2018-04-13 | 南京信通科技有限责任公司 | 基于ActiveMQ的大批量数据同步方法 |
CN108200184A (zh) * | 2018-01-12 | 2018-06-22 | 郑州云海信息技术有限公司 | 一种分布式Web即时消息发送系统和方法 |
-
2018
- 2018-12-11 CN CN201811512461.1A patent/CN109361770A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170214973A1 (en) * | 2014-05-28 | 2017-07-27 | I-Spy Digital Limited | Interactive display telecommunication method and system |
CN104092767A (zh) * | 2014-07-21 | 2014-10-08 | 北京邮电大学 | 一种增加消息队列模型的发布/订阅系统及其工作方法 |
CN104378415A (zh) * | 2014-10-29 | 2015-02-25 | 中国建设银行股份有限公司 | 一种基于消息的高可用云系统和实现方法 |
CN105282245A (zh) * | 2015-09-29 | 2016-01-27 | 努比亚技术有限公司 | 跨服务器消息推送系统及方法 |
CN106713226A (zh) * | 2015-11-12 | 2017-05-24 | 卓望数码技术(深圳)有限公司 | 一种用于分布式系统的远程过程调用处理方法和系统 |
CN107197015A (zh) * | 2017-05-23 | 2017-09-22 | 阿里巴巴集团控股有限公司 | 一种基于消息队列系统的消息处理方法和装置 |
CN107248978A (zh) * | 2017-05-27 | 2017-10-13 | 武汉票据交易中心有限公司 | 一种消息监听处理方法及系统 |
CN107911462A (zh) * | 2017-11-27 | 2018-04-13 | 南京信通科技有限责任公司 | 基于ActiveMQ的大批量数据同步方法 |
CN108200184A (zh) * | 2018-01-12 | 2018-06-22 | 郑州云海信息技术有限公司 | 一种分布式Web即时消息发送系统和方法 |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109889454A (zh) * | 2019-02-26 | 2019-06-14 | 浪潮软件集团有限公司 | 一种微服务架构的消息推送装置及方法 |
CN110138858A (zh) * | 2019-05-14 | 2019-08-16 | 北京杰思安全科技有限公司 | 一种基于Websocket的任务管理系统及方法 |
CN110533897A (zh) * | 2019-08-22 | 2019-12-03 | 杭州电子科技大学 | 基于socket的咖啡烘焙通信方法 |
CN110730118A (zh) * | 2019-09-24 | 2020-01-24 | 北京真视通科技股份有限公司 | 消息发送方法、装置、计算机设备和存储介质 |
CN111031058A (zh) * | 2019-12-23 | 2020-04-17 | 集奥聚合(北京)人工智能科技有限公司 | 基于WebSocket的分布式服务器集群交互方法及装置 |
CN111262923A (zh) * | 2020-01-14 | 2020-06-09 | 深圳壹账通智能科技有限公司 | 数据同步方法、装置、计算机设备及存储介质 |
CN111262923B (zh) * | 2020-01-14 | 2022-08-19 | 深圳壹账通智能科技有限公司 | 数据同步方法、装置、计算机设备及存储介质 |
CN111711689A (zh) * | 2020-06-16 | 2020-09-25 | 深圳市思迪信息技术股份有限公司 | 投顾系统图文直播方法及系统、设备及存储介质 |
CN112422677A (zh) * | 2020-11-17 | 2021-02-26 | 深圳市康必达中创科技有限公司 | 一种智能数据发布方法 |
CN112422677B (zh) * | 2020-11-17 | 2023-11-28 | 深圳市康必达中创科技有限公司 | 一种智能数据发布方法 |
CN112565421A (zh) * | 2020-12-03 | 2021-03-26 | 创盛视联数码科技(北京)有限公司 | 信息传输方法、系统、电子设备及存储介质 |
CN112637046A (zh) * | 2020-12-18 | 2021-04-09 | 北京房天下嘉居网络技术有限公司 | 消息推送方法及路由装置 |
CN114039961A (zh) * | 2021-10-08 | 2022-02-11 | 中移(杭州)信息技术有限公司 | 基于WebSocket的消息推送方法、设备、服务器及存储介质 |
CN114039942A (zh) * | 2021-10-12 | 2022-02-11 | 浪潮软件科技有限公司 | 基于即时通信的税企管理方法及系统 |
CN114039942B (zh) * | 2021-10-12 | 2023-09-05 | 浪潮软件科技有限公司 | 基于即时通信的税企管理方法及系统 |
CN114244557B (zh) * | 2021-11-09 | 2023-06-16 | 浪潮通用软件有限公司 | 基于用户特征的开发操作日志隔离方法和系统 |
CN114244557A (zh) * | 2021-11-09 | 2022-03-25 | 浪潮通用软件有限公司 | 基于用户特征的开发操作日志隔离方法和系统 |
CN114979238A (zh) * | 2022-05-24 | 2022-08-30 | 浪潮软件集团有限公司 | 多客户端数据实时推送方法及系统 |
CN115037753A (zh) * | 2022-06-22 | 2022-09-09 | 平安科技(深圳)有限公司 | 消息通知方法和系统 |
CN115037753B (zh) * | 2022-06-22 | 2023-10-27 | 平安科技(深圳)有限公司 | 消息通知方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109361770A (zh) | 基于WebSocket和消息队列实现双向实时通信的系统及方法 | |
CN105099989B (zh) | 用于处理业务请求及获取业务处理结果的方法、装置和系统 | |
CN106100914B (zh) | 一种云ac告警信息的推送方法及系统 | |
CN103096271A (zh) | 信息推送系统和信息推送方法 | |
CN101426181A (zh) | 具有即时互动的智能化多媒体信息手机浏览系统及实现方法 | |
CN102098233B (zh) | 即时通讯软件中通讯窗口的控制方法及控制系统 | |
CN105786592A (zh) | 一种分布式事务的处理方法及装置 | |
WO2015172497A1 (zh) | 消息推送、获取方法、装置和计算机可读存储介质 | |
CN106357523A (zh) | 确保推送信息及时到达的信息推送方法、装置及终端 | |
CN107870982A (zh) | 数据处理方法、系统和计算机可读存储介质 | |
CN107835222A (zh) | 基于复合物联网的燃气数据传输方法及物联网系统 | |
CN111880887A (zh) | 消息交互方法和装置、存储介质及电子设备 | |
CN102984272B (zh) | 一种远程控制移动终端通信能力的系统及其方法 | |
KR20180050786A (ko) | 태그 서칭 기반의 자동 질의 응답 시스템 및 방법 | |
CN107733716A (zh) | 分布式文件系统日志分析方法、系统、设备及存储介质 | |
CN101953188A (zh) | 一种业务管理平台下处理多渠道请求订购的方法和装置 | |
CN113840002A (zh) | 弱网环境下寄存柜的信息处理方法、系统、设备和介质 | |
CN106375324A (zh) | 一种基于tcp/ip通信协议的网络通信系统及方法 | |
CN106790639B (zh) | 数据传输方法及系统 | |
CN115277613A (zh) | 一种基于业务的机器人聊天系统 | |
CN107659636A (zh) | 基于复合物联网的热量数据传输方法及物联网系统 | |
CN113112711A (zh) | 语音接单器、基于智能语音技术的订单管理方法和系统 | |
CN104834704A (zh) | 应答方法及系统 | |
CN109660603A (zh) | 一种实现即时或定时控制远程设备数据展示的方法 | |
CN113268363B (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190219 |
|
RJ01 | Rejection of invention patent application after publication |