CN110062055B - 基于websocket的单用户多地登录分布式推送的方法 - Google Patents
基于websocket的单用户多地登录分布式推送的方法 Download PDFInfo
- Publication number
- CN110062055B CN110062055B CN201910467772.9A CN201910467772A CN110062055B CN 110062055 B CN110062055 B CN 110062055B CN 201910467772 A CN201910467772 A CN 201910467772A CN 110062055 B CN110062055 B CN 110062055B
- Authority
- CN
- China
- Prior art keywords
- message
- server
- websocket
- queue
- user
- 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.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
-
- 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)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提出一种基于websocket的单用户多地登录分布式推送的方法,属于信息推送技术领域。本发明解决了目前消息推送过程中出现的不足及无法适用到一些特需场景的问题,其技术方案要点为:利用消息队列,及缓存服务器对用户的缓存,当应用后台进行消息推送时,如果为群发消息,使用已声明好的广播式交换机,及通用的群发路由键将消息推送到所有的群发的队列中;所有的websocket服务器都监听到该群发消息,此时将消息发送到连接到自身websocket服务器的所有客户端。本发明既满足了分布式部署,支持当前流行的容器化一键部署,使部署更便捷,同时更是满足了同一用户在不同地方登录后,所有客户端对推送消息的需求。
Description
技术领域
本发明涉及信息推送技术,特别涉及基于websocket的单用户多地登录分布式推送的方法的技术。
背景技术
信息推送是指客户端能自动收到服务器端发送的信息,其目的是为了让用户获取到最新的消息和数据,使用户能及时查看到最新信息,提升用户体验。目前web实时推送技术主要采用两种方式,一种是采用http轮询的方法实现,定时向web服务器发送http请求,等待新的数据返回,这种方法对服务器和客户端都有较大开销;另一种方式是搭建websocket服务器,由于websocket本身不支持分布式部署,扩展性较差,常规的使用kafka+redis的方案虽然能较好的做到扩展,但每次增加节点需手动处理,较为麻烦,另外,同一个用户,在不同地方登录时,无法同时连接到该websocket服务器,在单用户支持多地登录的场景下,如手机和两台电脑上同时登录同一用户,现有方案无法很好解决。
发明内容
本发明的目的是提供一种基于websocket的单用户多地登录分布式推送的方法,解决目前消息推送过程中出现的不足及无法适用到一些特需场景的问题。
本发明解决其技术问题,采用的技术方案是:基于websocket的单用户多地登录分布式推送的方法,包括如下步骤:
A.启动websocket服务器,生成一个多位随机服务器id,使用一个指定前缀加服务器id在消息队列上声明一个队列,将该队列与事先声明好的一个发布订阅模式交换机进行绑定,绑定使用的路由键为指定前缀加服务器id,同时对刚声明的队列进行监听,另外,事先声明一个广播式交换机,声明一个群发使用的队列,所述群发使用的队列的队列名也是使用指定前缀加服务器id的方式,使用一个通用的群发路由键与上述广播式交换机绑定,启动websocket服务器时会同时监听该群发使用的队列;
B.客户端通过应用后台进行用户登录操作,在登陆后,后台服务返回一个携带用户id,即uid的及有效期的token;
C.客户端携带token通过负载均衡后,与websocket服务器作长连接操作;
D.websocket服务器通过token解析有效期及uid,对有效期内的uid进行二次处理,通过uid加多位的随机uuid,再加服务器id,形成一个新的wsuid,将该wsuid作为客户端连接id,建立缓存,同时,在缓存服务器中通过uid做key,wsuid加serverid做值进行缓存;
E.当应用后台进行消息推送时,如果为群发消息,使用步骤A中已声明好的广播式交换机,及通用的群发路由键将消息推送到所有的群发的队列中;
F.所有的websocket服务器都监听到该群发消息,此时将消息发送到连接到自身websocket服务器的所有客户端,完成所有用户都能收到该消息,或一个用户在不同客户端登录情况下,都能收到消息。
具体的是,步骤A中,所述随机服务器id的位数为八位。
进一步的是,步骤A中,所述指定前缀为websocket.msg.。
具体的是,步骤D中,所述多位的随机uuid的位数为八位。
进一步的是,步骤E中,若推送的消息为指定用户的推送,则通过uid在redis中查询所有对应该uid的wsuid及服务器id,使用步骤A中已声明好的发布订阅模式交换机,根据服务器id,将消息携带wsuid推送到对应的队列中,websocket服务器将通过监听不同的队列,只接收到对应自身服务器id的wsuid所需推送的消息,将消息指定wsuid推送到客户端,完成同一用户在不同地方登录时,保证所有该用户客户端收到对应的消息。
本发明的有益效果是,通过上述基于websocket的单用户多地登录分布式推送的方法,既满足了分布式部署,支持当前流行的容器化一键部署,使部署更便捷,同时更是满足了同一用户在不同地方登录后,所有客户端对推送消息的需求。
具体实施方式
下面结合实施例,详细描述本发明的技术方案。
本发明所述基于websocket的单用户多地登录分布式推送的方法,包括如下步骤:
A.启动websocket服务器,生成一个多位随机服务器id,使用一个指定前缀加服务器id在消息队列上声明一个队列,将该队列与事先声明好的一个发布订阅模式交换机进行绑定,绑定使用的路由键为指定前缀加服务器id,同时对刚声明的队列进行监听,另外,事先声明一个广播式交换机,声明一个群发使用的队列,其中,群发使用的队列的队列名也是使用指定前缀加服务器id的方式,使用一个通用的群发路由键与上述广播式交换机绑定,启动websocket服务器时会同时监听该群发使用的队列。
B.客户端通过应用后台进行用户登录操作,在登陆后,后台服务返回一个携带用户id,即uid的及有效期的token。
C.客户端携带token通过负载均衡后,与websocket服务器作长连接操作。
D.websocket服务器通过token解析有效期及uid,对有效期内的uid进行二次处理,通过uid加多位的随机uuid,再加服务器id,形成一个新的wsuid,将该wsuid作为客户端连接id,建立缓存,同时,在缓存服务器中通过uid做key,wsuid加serverid做值进行缓存。
E.当应用后台进行消息推送时,如果为群发消息,使用步骤A中已声明好的广播式交换机,及通用的群发路由键将消息推送到所有的群发的队列中。
F.所有的websocket服务器都监听到该群发消息,此时将消息发送到连接到自身websocket服务器的所有客户端,完成所有用户都能收到该消息,或一个用户在不同客户端登录情况下,都能收到消息。
实施例一
本发明实施例基于websocket的单用户多地登录分布式推送的方法,包括如下步骤:
A.启动websocket服务器,生成一个八位随机服务器id,使用一个指定前缀加服务器id在消息队列上声明一个队列,其中,指定前缀优选为websocket.msg.,将该队列与事先声明好的一个发布订阅模式交换机进行绑定,绑定使用的路由键为指定前缀加服务器id,同时对刚声明的队列进行监听;另外,事先会声明一个广播式交换机,声明一个群发使用的队列,队列名也是使用指定前缀加serverId的方式,使用一个通用的群发路由键与上述广播式交换机绑定,启动websocket服务器时会同时监听该群发使用的队列。
B.客户端通过应用后台进行用户登录操作,在登陆后,后台服务返回一个携带用户id,即uid的及有效期的token;
C.客户端携带token通过负载均衡后,与websocket服务器作长连接操作;
D.websocket服务器通过token解析有效期及uid,对有效期内的uid进行二次处理,通过uid加多位的随机uuid,其中,多位的随机uuid的位数为八位,再加服务器id,形成一个新的wsuid,将该wsuid作为客户端连接id,建立缓存,同时,在缓存服务器中通过uid做key,wsuid加serverid做值进行缓存;
E.当应用后台进行消息推送时,如果为群发消息,使用步骤A中已声明好的广播式交换机,及通用的群发路由键将消息推送到所有的群发的队列中;
F.所有的websocket服务器都监听到该群发消息,此时将消息发送到连接到自身websocket服务器的所有客户端,完成所有用户都能收到该消息,或一个用户在不同客户端登录情况下,都能收到消息。
实施例二
在上述实施例一的步骤E中,在后台推送消息时,可能为针对某一指定用户推送,若推送的消息为指定用户的推送,则通过uid在redis中查询所有对应该uid的wsuid及服务器id,使用发布订阅模式交换机,根据服务器id,将消息携带wsuid推送到对应的队列中。
websocket服务器将通过监听不同的队列,只接收到对应自身服务器id的wsuid所需推送的消息,将消息指定wsuid推送到客户端,完成同一用户在不同地方登录时,保证所有该用户客户端收到对应的消息。
Claims (5)
1.基于websocket的单用户多地登录分布式推送的方法,其特征在于,包括如下步骤:
A.启动websocket服务器,生成一个多位随机服务器id,使用一个指定前缀加服务器id在消息队列上声明一个队列,将该队列与事先声明好的一个发布订阅模式交换机进行绑定,绑定使用的路由键为指定前缀加服务器id,同时对刚声明的队列进行监听,另外,事先声明一个广播式交换机,声明一个群发使用的队列,所述群发使用的队列的队列名也是使用指定前缀加服务器id的方式,使用一个通用的群发路由键与上述广播式交换机绑定,启动websocket服务器时会同时监听该群发使用的队列;
B.客户端通过应用后台进行用户登录操作,在登陆后,后台服务返回一个携带用户id,即uid的及有效期的token;
C.客户端携带token通过负载均衡后,与websocket服务器作长连接操作;
D.websocket服务器通过token解析有效期及uid,对有效期内的uid进行二次处理,通过uid加多位的随机uuid,再加服务器id,形成一个新的wsuid,将该wsuid作为客户端连接id,建立缓存,同时,在缓存服务器中通过uid做key,wsuid加serverid做值进行缓存;
E.当应用后台进行消息推送时,如果为群发消息,使用步骤A中已声明好的广播式交换机,及通用的群发路由键将消息推送到所有的群发的队列中;
F.所有的websocket服务器都监听到该群发消息,此时将消息发送到连接到自身websocket服务器的所有客户端,完成所有用户都能收到该消息,或一个用户在不同客户端登录情况下,都能收到消息。
2.根据权利要求1所述的基于websocket的单用户多地登录分布式推送的方法,其特征在于,步骤A中,所述随机服务器id的位数为八位。
3.根据权利要求1所述的基于websocket的单用户多地登录分布式推送的方法,其特征在于,步骤A中,所述指定前缀为websocket.msg.。
4.根据权利要求1所述的基于websocket的单用户多地登录分布式推送的方法,其特征在于,步骤D中,所述多位的随机uuid的位数为八位。
5.根据权利要求1所述的基于websocket的单用户多地登录分布式推送的方法,其特征在于,步骤E中,若推送的消息为指定用户的推送,则通过uid在redis中查询所有对应该uid的wsuid及服务器id,使用步骤A中已声明好的发布订阅模式交换机,根据服务器id,将消息携带wsuid推送到对应的队列中,websocket服务器将通过监听不同的队列,只接收到对应自身服务器id的wsuid所需推送的消息,将消息指定wsuid推送到客户端,完成同一用户在不同地方登录时,保证所有该用户客户端收到对应的消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910467772.9A CN110062055B (zh) | 2019-05-31 | 2019-05-31 | 基于websocket的单用户多地登录分布式推送的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910467772.9A CN110062055B (zh) | 2019-05-31 | 2019-05-31 | 基于websocket的单用户多地登录分布式推送的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110062055A CN110062055A (zh) | 2019-07-26 |
CN110062055B true CN110062055B (zh) | 2021-07-20 |
Family
ID=67325241
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910467772.9A Active CN110062055B (zh) | 2019-05-31 | 2019-05-31 | 基于websocket的单用户多地登录分布式推送的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110062055B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110708391B (zh) * | 2019-10-17 | 2022-07-12 | 山东浪潮智慧医疗科技有限公司 | 一种基于WebSocket的互联网问诊实现方法及*** |
CN110971686B (zh) * | 2019-11-29 | 2022-03-08 | 湖南御家科技有限公司 | 一种支持高并发、高可用的电子商城客服*** |
CN111211934B (zh) * | 2019-12-25 | 2022-04-12 | 曙光信息产业(北京)有限公司 | 集群远程通信测试方法以及*** |
CN111147746B (zh) * | 2019-12-30 | 2020-10-23 | 深圳市金龙锋科技有限公司 | 一种智能早教设备终端管理方法 |
CN111222074A (zh) * | 2020-01-09 | 2020-06-02 | 山东汇贸电子口岸有限公司 | 一种基于Websocket协议的消息推送方法及*** |
CN114124867B (zh) * | 2021-11-18 | 2023-07-04 | 大连九锁网络有限公司 | 一种二三层混合网络结构下的群发即时消息传输方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103780681A (zh) * | 2014-01-06 | 2014-05-07 | 南京莱斯信息技术股份有限公司 | 一种高实时性Web应用***及其数据实时推送方法 |
CN104753817A (zh) * | 2013-12-25 | 2015-07-01 | ***通信集团公司 | 一种云计算消息队列服务本地模拟方法和*** |
US9137189B2 (en) * | 2011-03-24 | 2015-09-15 | Red Hat, Inc. | Providing distributed dynamic routing using a logical broker |
CN106936698A (zh) * | 2017-04-13 | 2017-07-07 | 合肥市群智科技有限公司 | 一种基于websocket的pc端即时通信应用方法 |
CN108683653A (zh) * | 2018-05-07 | 2018-10-19 | 常熟市第人民医院 | 一种基于WebSocket的主动式消息推送*** |
CN109040300A (zh) * | 2018-09-04 | 2018-12-18 | 航天信息股份有限公司 | 推送消息的方法、装置和存储介质 |
CN109660617A (zh) * | 2018-12-18 | 2019-04-19 | 中电科华云信息技术有限公司 | 一种基于服务器集群的消息推送方法 |
CN109802995A (zh) * | 2018-12-13 | 2019-05-24 | 深圳壹账通智能科技有限公司 | 消息推送方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7974966B2 (en) * | 2007-08-31 | 2011-07-05 | Red Hat, Inc. | Method and an apparatus to deliver messages between applications |
-
2019
- 2019-05-31 CN CN201910467772.9A patent/CN110062055B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9137189B2 (en) * | 2011-03-24 | 2015-09-15 | Red Hat, Inc. | Providing distributed dynamic routing using a logical broker |
CN104753817A (zh) * | 2013-12-25 | 2015-07-01 | ***通信集团公司 | 一种云计算消息队列服务本地模拟方法和*** |
CN103780681A (zh) * | 2014-01-06 | 2014-05-07 | 南京莱斯信息技术股份有限公司 | 一种高实时性Web应用***及其数据实时推送方法 |
CN106936698A (zh) * | 2017-04-13 | 2017-07-07 | 合肥市群智科技有限公司 | 一种基于websocket的pc端即时通信应用方法 |
CN108683653A (zh) * | 2018-05-07 | 2018-10-19 | 常熟市第人民医院 | 一种基于WebSocket的主动式消息推送*** |
CN109040300A (zh) * | 2018-09-04 | 2018-12-18 | 航天信息股份有限公司 | 推送消息的方法、装置和存储介质 |
CN109802995A (zh) * | 2018-12-13 | 2019-05-24 | 深圳壹账通智能科技有限公司 | 消息推送方法、装置、设备及存储介质 |
CN109660617A (zh) * | 2018-12-18 | 2019-04-19 | 中电科华云信息技术有限公司 | 一种基于服务器集群的消息推送方法 |
Non-Patent Citations (3)
Title |
---|
Evaluation of Server Push Technologies for Scalable Client-Server Communication;Elton F.de Souze Soares;《2018 IEEE Sympisium on Service System Engineering》;20180517;全文 * |
基于MQTT协议的推送技术研究;陈涛;《软件导刊》;20160331;第15卷(第3期);第18-20页 * |
基于websocket的服务器推送技术的研究;胡洋洋;《中国优秀硕士学位论文全文数据库信息科技辑》;20190215;第I139-161页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110062055A (zh) | 2019-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110062055B (zh) | 基于websocket的单用户多地登录分布式推送的方法 | |
EP3595268A1 (en) | Streaming media resource distribution method, system, edge node and central dispatching system | |
Zhang et al. | A peer-to-peer network for live media streaming using a push-pull approach | |
Guo et al. | P2Cast: peer-to-peer patching scheme for VoD service | |
US9325786B2 (en) | Peer-to-peer interactive media-on-demand | |
US10681127B2 (en) | File upload method and system | |
CN102065112B (zh) | 对等网络***、建立对等网络***的方法及相关装置 | |
US20140280522A1 (en) | System and method for providing an actively invalidated client-side network resource cache | |
WO2007005546A3 (en) | Method and apparatus for browsing network resources using an asynchronous communications protocol | |
JP2009521843A (ja) | ユニキャスト・セッションとマルチキャスト・セッションとの間で変換を行うための方法 | |
US20110126256A1 (en) | Method for live broadcasting in a distributed network and apparatus for the same | |
WO2010127618A1 (zh) | 一种实现流媒体内容服务的***和方法 | |
KR20090122981A (ko) | 모바일 tv를 위한 로버스트 파일 캐스팅 | |
CN101127623A (zh) | 数据处理方法、装置及*** | |
WO2012000220A1 (zh) | 一种网页上实现的自动接收群组消息的方法 | |
CN1694492A (zh) | 网络中p2p技术在信息家电终端应用的装置及方法 | |
CN104320405A (zh) | 一种适用于星型卫星网络的上网优化方法 | |
Wang et al. | Proxy-based distribution of streaming video over unicast/multicast connections | |
Xu et al. | Twittering by cuckoo: decentralized and socio-aware online microblogging services | |
CN112118117A (zh) | 一种基于Paxos算法的区块链共识方法 | |
CN110380967B (zh) | 一种基于sse技术的服务器推送消息方法 | |
CN1812566A (zh) | 在信息家电中实现p2p流播放的装置和方法 | |
CA2812622A1 (en) | Method and system for downloading real-time streaming media in peer-to-peer network | |
US9232468B2 (en) | Delivering a plurality of simultaneous sessions to a client via a radio access network | |
CN105340247B (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 |