CN108289055B - 一种基于Redis订阅服务的分布式实时聊天系统及方法 - Google Patents
一种基于Redis订阅服务的分布式实时聊天系统及方法 Download PDFInfo
- Publication number
- CN108289055B CN108289055B CN201810009781.9A CN201810009781A CN108289055B CN 108289055 B CN108289055 B CN 108289055B CN 201810009781 A CN201810009781 A CN 201810009781A CN 108289055 B CN108289055 B CN 108289055B
- Authority
- CN
- China
- Prior art keywords
- end node
- chat
- redis
- nodes
- client
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/04—Real-time or near real-time messaging, e.g. instant messaging [IM]
- H04L51/046—Interoperability with other network applications or services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/10—Active monitoring, e.g. heartbeat, ping or trace-route
-
- 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/14—Session management
- H04L67/141—Setup of application sessions
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Cardiology (AREA)
- General Health & Medical Sciences (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种基于Redis订阅服务的分布式实时聊天系统及方法,该方法将传统的聊天系统分为前端节点和后端节点,并且将前端节点和后端节点通过Redis的订阅服务来进行连接;前端节点和后端节点都可以支持多实例横向扩展,从而构成整个分布式的聊天系统架构;同时,通过Zookeeper的心跳机制,快速的排除集群中存在问题的节点,达到整体服务的高可用。本发明无单节点问题,所有节点都是分布式部署的,不会出现一个节点故障影响整体聊天服务;可横向扩展,节点都是分布式的,可以快速的增加节点来提升处理能力,减少系统性能瓶颈;能够让客户端就近接入,前端节点分布在各个地理位置,能够让客户端接入到离自己最近的前端节点。
Description
技术领域
本发明涉及一种实时聊天系统及其实现方法,具体涉及一种基于 Redis订阅服务的分布式实时聊天系统及方法,属于互联网技术领域。
背景技术
现有技术中的聊天系统中,系统的架构普遍采用典型的单机程序结构,即聊天推送服务部署在一台单独的服务器上,通过TCP服务对外提供端口和连接支持,所有需要聊天服务的客户端也通过TCP协议连接到改聊天服务器上,某个客户端发出消息后,经过聊天服务器的中转,转发到其他所有连接到该服务器的客户端上。
传统的单机程序的聊天服务,存在以下三方面缺点,
第一:单节点问题,由于传统技术方案中采用的是单服务器节点的架构,如果聊天服务器出现故障无法访问时,将会造成整个聊天服务的瘫痪;
第二:无法横向扩展的问题,在传统技术方案中,由于各个客户端之间的消息需要互相传递,所以所有客户端必须连上同一台聊天服务器,这就会导致在系统负载变大的时候,我们无法通过再增加一台聊天服务器来增加系统的处理容量,限制了系统的并发规模;
第三:无法为客户端提供就近接入的问题,因为是整个系统是一个单机程序结构,只能部署在一个机房,这就导致处于不同地域的客户端在连接时跨地域较大,连接质量也难以保证。
本提案提供的实时聊天系统分部署方法,通过将系统进行分层,借助redis消息订阅服务来传递系统内部消息,可以达到聊天服务节点的分部署部署,从而解决上述存在的三个问题。
因此,研制一种分布式结构、可横向扩展和易于实现客户端就近接入的聊天系统及方法是非常必要的,并且该发明也有重要的应用前景。
发明内容
本发明针对上述现有技术存在的问题作出改进,即本发明的第一个目的在于公开一种基于Redis订阅服务的分布式实时聊天系统的实现方法,本发明的第二个目的在于公开基于Redis订阅服务的分布式实时聊天系统,采用分布式结构、可横向扩展和易于实现客户端就近接入。
为了实现上述目标,本发明所采用的技术方案是:
一种基于Redis订阅服务的分布式实时聊天系统的实现方法,其特征在于,包括以下步骤:
S1、建立每一个后端节点与Redis数据库之间的消息订阅/发布通道;
建立每一个前端节点与Redis数据库之间的消息订阅/发布公共通道;
S2、客户端与前端节点建立连接,通过连接发送聊天数据到前端节点;
S3、前端节点检查维护在自身内存中的后端节点可用列表,剔除其中不可用的节点,仅保留可用的后端节点;
S4、前端节点从后端节点可用列表中随机选择一个可用的后端节点,根据步骤S1中建立的后端节点与Redis数据库之间的消息订阅/ 发布通道,向Redis数据库发布从客户端收到的聊天数据;
S5、后端节点通过订阅的Redis的消息订阅通道收到聊天数据,然后由后端节点对该聊天数据进行处理;
S6、后端节点通过步骤S1中建立的消息订阅/发布公共通道向所有的前端节点发布本条聊天数据;
S7、前端节点收到本条聊天消息后轮询获取所有连接到自己并处于同一聊天会话的客户端,依次将聊天数据发送到客户端;
S8、所有处于同一聊天会话的客户端收到聊天数据。
前述的基于Redis订阅服务的分布式实时聊天系统的实现方法,其特征在于,所述步骤S2中,客户端与前端节点建立的连接为HTTP 长连接。
前述的基于Redis订阅服务的分布式实时聊天系统的实现方法,其特征在于,所述步骤S3中,前端节点根据Zookeeper的实时心跳探测机制,剔除不可用的节点,保留可用节点。
前述的基于Redis订阅服务的分布式实时聊天系统的实现方法,其特征在于,所述步骤S5中,后端节点对消息的处理包括但不限于以下各项:关键词过滤、存储。
一种基于Redis订阅服务的分布式实时聊天系统,其特征在于,包括:若干个后端节点(1)、Redis数据库(2)、若干个前端节点(3) 和若干个客户端(4);
每个所述客户端(4)与一个所述前端节点(3)之间建立连接,每一个所述后端节点(1)与所述Redis数据库(2)之间建立消息订阅/发布通道,每一个所述前端节点(3)与所述Redis数据库(2) 之间建立消息订阅/发布通道;
发送端所述客户端(4)收到的聊天信息通过所述前端节点(3) 发送到所述Redis数据库(2),然后通过所述Redis数据库(2)的订阅/发布通道发送到所述前端节点(3)选择的可用的所述后端节点 (1),所述后端节点(1)将收到的聊天信息通过所述Redis数据库(2)与所有所述前端节点(3)之间的订阅/发布通道发送给所有的所述前端节点(3),所述前端节点(3)轮询所有与其连接的所述客户端(4),将聊天信息发送到与发送端所述客户端(4)处于同一会话的所述客户端(4)。
前述的基于Redis订阅服务的分布式实时聊天系统,其特征在于,所述客户端(4)与所述前端节点(3)之间的连接为HTTP长连接。
前述的基于Redis订阅服务的分布式实时聊天系统,其特征在于,所述前端节点(3)还包括:后端节点可用列表,所述前端节点 (3)根据所述后端节点可用列表随机选择一个可用的所述后端节点 (1)。
前述的基于Redis订阅服务的分布式实时聊天系统,其特征在于,所述前端节点(4)根据Zookeeper的实时心跳探测机制维护后端节点可用列表。
与现有技术相比,本发明的有益之处在于:
(1)无单节点问题,本发明架构中的所有节点都是分布式部署的,并且使用了ZooKeeper来实时监控可用性和调整,不会出现一个节点故障的情况下影响整体聊天服务;
(2)可横向扩展,节点都是分布式的,可以快速的增加节点来提升处理能力,减少系统性能瓶颈;
(3)能够让客户端就近接入,前端节点分布在各个地理位置,配合调度逻辑能够让客户端接入到离自己最近的前端节点,提升连接质量。
附图说明
图1是现有技术中聊天系统的系统架构示意图;
图2是本发明的基于Redis订阅服务的分布式实时聊天系统的一个具体实施例的系统结构图;
图3是本发明的基于Redis订阅服务的分布式实时聊天系统的实现方法的流程图。
其中:
1-后端节点 2-Redis数据库
3-前端节点 4-客户端。
具体实施方式
以下结合附图和具体实施例对本发明作具体的介绍。
参照图1和图3,本发明的基于Redis订阅服务的分布式实时聊天系统的实现方法,包括以下步骤:
S1、建立每一个后端节点与Redis数据库之间的消息订阅/发布通道;
建立每一个前端节点与Redis数据库之间的消息订阅/发布公共通道;
Redis数据库是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,当Redis数据库作为一个发布订阅服务使用时,其在订阅者和发布者之间起到了消息路由的功能,订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型; Redis数据库将消息类型称为通道(channel),当发布者通过publish 命令向Redis数据库发送特定类型的消息时,订阅该消息类型的全部客户端都会收到此消息,这里消息的传递是多对多的,一个客户端可以订阅多个通道,也可以向多个通道发送消息。
S2、客户端与前端节点建立连接,通过连接发送聊天数据到前端节点;
S3、前端节点检查维护在自身内存中的后端节点可用列表,剔除其中不可用的节点,仅保留可用的后端节点;
S4、前端节点从后端节点可用列表中随机选择一个可用的后端节点,根据步骤S1中建立的后端节点与Redis数据库之间的消息订阅/ 发布通道,向Redis数据库发布从客户端收到的聊天数据;
S5、后端节点通过订阅的Redis的消息订阅通道收到聊天数据,然后由后端节点对该聊天数据进行处理;
S6、后端节点通过步骤S1中建立的消息订阅/发布公共通道向所有的前端节点发布本条聊天数据;
S7、前端节点收到本条聊天消息后轮询获取所有连接到自己并处于同一聊天会话的客户端,依次将聊天数据发送到客户端;
S8、所有处于同一聊天会话的客户端收到聊天数据。
作为一种优选的方案,步骤S2中,客户端与前端节点建立的连接为HTTP长连接。
作为一种优选的方案,步骤S3中,前端节点根据Zookeeper的实时心跳探测机制,剔除不可用的节点,保留可用节点;ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,基于其对各后端节点1的探测心跳功能,将整个实时聊天系统中的后端节点1可用状态进行维护,保存在内存中,让每个前端节点3都知道其他各个后端节点1的可用状态。
作为一种优选的方案,步骤S5中,后端节点对消息的处理包括但不限于以下各项:关键词过滤、存储。
参照图2,本发明的基于Redis订阅服务的分布式实时聊天系统,包括:两个后端节点1、Redis数据库2、三个前端节点3和四个客户端4;
每个客户端4与一个前端节点3之间建立连接,每一个后端节点 1与Redis数据库2之间建立消息订阅/发布通道,每一个前端节点3 与Redis数据库2之间建立消息订阅/发布通道;
发送端客户端4收到的聊天信息通过前端节点3发送到Redis数据库2,然后通过Redis数据库2的订阅/发布通道发送到前端节点3 选择的可用的后端节点1,后端节点1将收到的聊天信息通过Redis 数据库2与所有前端节点3之间的订阅/发布通道发送给所有的前端节点3,前端节点3轮询所有与其连接的客户端4,将聊天信息发送到与发送端客户端4处于同一会话的客户端4;
客户端4:指分布在各地连接到本发明的基于Redis订阅服务的分布式实时聊天系统的所有客户端4,单个客户端4可以发送聊天数据,并且也能接收其他客户端4实时发送过来的聊天数据,在实际应用中,客户端4A、B、C、D加入到了同一个聊天室中,A发送一条聊天数据,B、C、D能够马上收到该条消息。
前端节点3:指代承载客户端连接连接的节点,可以分布在各个不同的地理位置,同一个会话里的多个客户端4可以连接到不同的前端节点3上面,前端节,3收到客户端4发送的聊天数据后,会通过 Redis数据库2订阅服务将聊天数据向后传递,同时,前端节点3还会通过Redis数据库2订阅其他客户端4发送的聊天数据,将其转发给连接到自己并且属于同一个会话的客户端4。
Redis数据库2:应用其消息订阅发布服务,来完成聊天数据在不同节点之间的传递与解耦合;
后端节点1:指代接收前端节点3聊天数据,进行处理与转发的节点,后端节点1会通过Redis数据库2订阅前端节点3发布过来的聊天数据,进行处理,再将该聊天数据通过Redis数据库2发布给所有的前端节点3,以达到推送聊天数据的目的。
作为一种优选的方案,客户端4与前端节点3之间的连接为HTTP 长连接。
作为一种优选的方案,前端节点3还包括:后端节点可用列表,前端节点3根据后端节点可用列表随机选择一个可用的后端节点1。
作为一种更加优选的方案,前端节点4根据Zookeeper的实时心跳探测机制维护后端节点可用列表。
综上所述,本发明的基于Redis订阅服务的分布式实时聊天系统及方法,采用了分层的思想,通过将传统的聊天系统分为前端节点和后端节点,并且将前端节点和后端节点通过Redis的订阅服务来进行连接;前端节点和后端节点都可以支持多实例横向扩展,如此一来便构成了整个分布式的聊天系统架构;同时,通过Zookeeper的心跳机制,快速的排除集群中存在问题的节点,达到整体服务的高可用。
需要说明的是,以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (1)
1.一种基于Redis订阅服务的分布式实时聊天系统的实现方法,其特征在于,应用于基于Redis订阅服务的分布式实时聊天系统,所述基于Redis订阅服务的分布式实时聊天系统包括:若干个后端节点、Redis数据库、若干个前端节点和若干个客户端;所述基于Redis订阅服务的分布式实时聊天系统的实现方法包括以下步骤:
S1、建立每一个后端节点与Redis数据库之间的消息订阅/发布通道;建立每一个前端节点与Redis数据库之间的消息订阅/发布公共通道;
S2、每个客户端与一个前端节点建立连接,通过连接发送聊天数据到前端节点;
S3、前端节点检查维护在自身内存中的后端节点可用列表,剔除其中不可用的节点,仅保留可用的后端节点;
S4、前端节点从后端节点可用列表中随机选择一个可用的后端节点,根据步骤S1中建立的后端节点与Redis数据库之间的消息订阅/发布通道,向Redis数据库发布从客户端收到的聊天数据;
S5、后端节点通过订阅的Redis的消息订阅通道收到聊天数据,然后由后端节点对该聊天数据进行处理;
S6、后端节点通过步骤S1中建立的消息订阅/发布公共通道向所有的前端节点发布本条聊天数据;
S7、前端节点收到本条聊天消息后轮询获取所有连接到自己并处于同一聊天会话的客户端,依次将聊天数据发送到与发送端所述客户端处于同一会话的所述客户端;
S8、所有处于同一聊天会话的客户端收到聊天数据;
其中,所述步骤S2中,客户端与前端节点建立的连接为HTTP长连接;
其中,所述步骤S3中,前端节点根据zookeeper的实时心跳探测机制,剔除不可用的节点,保留可用节点;
其中,所述步骤S5中,后端节点对消息的处理包括但不限于以下各项:关键词过滤、存储;
其中,所述前端节点还包括:后端节点可用列表,所述前端节点根据所述后端节点可用列表随机选择一个可用的所述后端节点;
其中;所述前端节点根据zookeeper的实时心跳探测机制维护所述后端节点可用列表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810009781.9A CN108289055B (zh) | 2018-01-05 | 2018-01-05 | 一种基于Redis订阅服务的分布式实时聊天系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810009781.9A CN108289055B (zh) | 2018-01-05 | 2018-01-05 | 一种基于Redis订阅服务的分布式实时聊天系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108289055A CN108289055A (zh) | 2018-07-17 |
CN108289055B true CN108289055B (zh) | 2021-04-02 |
Family
ID=62834979
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810009781.9A Active CN108289055B (zh) | 2018-01-05 | 2018-01-05 | 一种基于Redis订阅服务的分布式实时聊天系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108289055B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109951560B (zh) * | 2019-03-27 | 2023-11-14 | 努比亚技术有限公司 | 提高应用服务并发量及应用速度的方法、终端及存储介质 |
CN111565229B (zh) * | 2020-04-29 | 2020-11-27 | 创盛视联数码科技(北京)有限公司 | 一种基于Redis的通信系统分布式方法 |
CN112035572B (zh) * | 2020-08-21 | 2024-03-12 | 西安寰宇卫星测控与数据应用有限公司 | 创建表格实例的静态方法、装置、计算机设备、存储介质 |
CN115412520A (zh) * | 2022-09-04 | 2022-11-29 | 成都优啊网络科技有限公司 | 一种即时通信im聊天数据存储读写交互的方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8595301B2 (en) * | 2008-01-25 | 2013-11-26 | International Business Machines Corporation | Message delivery in messaging networks |
US8782145B2 (en) * | 2010-01-28 | 2014-07-15 | Microsoft Corporation | Following content item updates via chat groups |
GB2483280A (en) * | 2010-09-02 | 2012-03-07 | Skype Ltd | Point-to-point communication with persistent connection to front-end server |
US20150019353A1 (en) * | 2012-02-06 | 2015-01-15 | Adstruc, Inc. | System for managing the utilization of a plurality of outdoor advertising units |
CN103607423A (zh) * | 2013-10-23 | 2014-02-26 | 深圳海联讯科技股份有限公司 | 一种基于WebSocket协议的分布式广播系统 |
CN104717133A (zh) * | 2015-03-16 | 2015-06-17 | 墨仕(厦门)电子商务有限公司 | 一种分布式消息推送系统及方法 |
CN106130882B (zh) * | 2016-07-13 | 2019-04-30 | 北京百度网讯科技有限公司 | 用于传输消息的方法和装置 |
-
2018
- 2018-01-05 CN CN201810009781.9A patent/CN108289055B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108289055A (zh) | 2018-07-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108289055B (zh) | 一种基于Redis订阅服务的分布式实时聊天系统及方法 | |
CN109618005B (zh) | 调用服务器的方法和代理服务器 | |
CA2770138C (en) | Cluster server of an instant messaging system and messaging method between clusters | |
CN109474936B (zh) | 应用于多个lora网关之间的物联网通讯方法及系统 | |
CN109067578B (zh) | 一种组播快速切换的方法和装置 | |
US20030041101A1 (en) | Presence watcher proxy | |
US11611626B1 (en) | Methods, systems, and computer readable media for distributing network function (NF) high availability (HA) topology information in a core network | |
JP2012160189A (ja) | ネットワーク環境において非持続性のメッセージの複数のキューを管理する方法、システム及び記憶媒体 | |
JP2001521716A (ja) | マルチキャスト・ネットワークにおいてマルチキャスト・グループ・メンバシップを管理するためのシステム,デバイスおよび方法 | |
CN113259423B (zh) | P2p系统中客户端联网访问的方法及装置 | |
CN114338063B (zh) | 消息队列系统、业务处理方法及计算机可读存储介质 | |
CN114554550A (zh) | 5g接入网与边缘云网关的通信方法及装置 | |
CN106899605B (zh) | 基于stomp协议的通信方法和装置 | |
WO2012041404A1 (en) | Distributed database | |
US20220166842A1 (en) | Data distribution method and electronic device | |
CN114338769B (zh) | 访问请求的处理方法及装置 | |
US20180081746A1 (en) | Application message processing system, method, and application device | |
CN111737029A (zh) | 一种服务端、数据推送方法、数据推送系统 | |
Kim et al. | A scalable pub/sub system for ndn | |
TWI477113B (zh) | Information processing methods and systems | |
CN114358938A (zh) | 交易、区块的广播方法、设备和存储介质 | |
KR20220063503A (ko) | 메시지 교환 방식을 이용한 계층화된 IoT 서비스 시스템 | |
CN102571967B (zh) | 一种实现多对象数据交互应答和呼叫功能的系统及方法 | |
CN110932874B (zh) | 分布式消息广播通知实现方法 | |
CN115022392B (zh) | 面向iot的分布式发布订阅服务方法和系统 |
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 |