一种基于Redis订阅服务的分布式实时聊天系统及方法技术方案

技术编号:18460672 阅读:36 留言:0更新日期:2018-07-18 13:28
本发明专利技术公开了一种基于Redis订阅服务的分布式实时聊天系统及方法,该方法将传统的聊天系统分为前端节点和后端节点,并且将前端节点和后端节点通过Redis的订阅服务来进行连接;前端节点和后端节点都可以支持多实例横向扩展,从而构成整个分布式的聊天系统架构;同时,通过Zookeeper的心跳机制,快速的排除集群中存在问题的节点,达到整体服务的高可用。本发明专利技术无单节点问题,所有节点都是分布式部署的,不会出现一个节点故障影响整体聊天服务;可横向扩展,节点都是分布式的,可以快速的增加节点来提升处理能力,减少系统性能瓶颈;能够让客户端就近接入,前端节点分布在各个地理位置,能够让客户端接入到离自己最近的前端节点。

A distributed real-time chat system and method based on Redis subscription service

The present invention discloses a distributed real-time chat system based on Redis subscription service, which divides the traditional chat system into front end and back end nodes, and connects the front end and back end nodes through the subscription service of the Redis; both front and back end nodes can support multi instance transversal expansion. As a result, the whole distributed chat system architecture is formed; at the same time, through the Zookeeper heartbeat mechanism, the nodes in the cluster are quickly removed to achieve the high availability of the whole service. The invention has no single node problem, all nodes are distributed deployed, no node failure will affect the overall chat service; it can be extended horizontally and the nodes are distributed, which can quickly increase the node to improve the processing capability and reduce the system performance bottleneck; it can allow the client to access near, the front node points. In various geographic locations, the client can access the nearest front-end node.

【技术实现步骤摘要】
一种基于Redis订阅服务的分布式实时聊天系统及方法
本专利技术涉及一种实时聊天系统及其实现方法,具体涉及一种基于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数据库是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,当Redis数据库作为一个发布订阅服务使用时,其在订阅者和发布者之间起到了消息路由的功能,订阅者可以通过subscribe和psubscribe命令向redisserver订阅自己感兴趣的消息类型;Redis数据库将消息类型称为通道(channel),当发布者通过publish命令向Redis数据库发送特定类型的消息时,订阅该消息类型的全部客户端都会收到此消息,这里消息的传递是多对多的,一个客户端可以订阅多个通道,也可以向多个通道发送消息。S2、客户端与前端节点建立连接,通过连接发送聊天数据到前端节点;S3、前端节点检查维护在自身内存中的后端节点可用列表,剔除其中不可用的节点,仅保留可用的后端节点;S4、前端节点从本文档来自技高网...

【技术保护点】
1.一种基于Redis订阅服务的分布式实时聊天系统的实现方法,其特征在于,包括以下步骤:S1、建立每一个后端节点与Redis数据库之间的消息订阅/发布通道;建立每一个前端节点与Redis数据库之间的消息订阅/发布公共通道;S2、客户端与前端节点建立连接,通过连接发送聊天数据到前端节点;S3、前端节点检查维护在自身内存中的后端节点可用列表,剔除其中不可用的节点,仅保留可用的后端节点;S4、前端节点从后端节点可用列表中随机选择一个可用的后端节点,根据步骤S1中建立的后端节点与Redis数据库之间的消息订阅/发布通道,向Redis数据库发布从客户端收到的聊天数据;S5、后端节点通过订阅的Redis的消息订阅通道收到聊天数据,然后由后端节点对该聊天数据进行处理;S6、后端节点通过步骤S1中建立的消息订阅/发布公共通道向所有的前端节点发布本条聊天数据;S7、前端节点收到本条聊天消息后轮询获取所有连接到自己并处于同一聊天会话的客户端,依次将聊天数据发送到客户端;S8、所有处于同一聊天会话的客户端收到聊天数据。

【技术特征摘要】
1.一种基于Redis订阅服务的分布式实时聊天系统的实现方法,其特征在于,包括以下步骤:S1、建立每一个后端节点与Redis数据库之间的消息订阅/发布通道;建立每一个前端节点与Redis数据库之间的消息订阅/发布公共通道;S2、客户端与前端节点建立连接,通过连接发送聊天数据到前端节点;S3、前端节点检查维护在自身内存中的后端节点可用列表,剔除其中不可用的节点,仅保留可用的后端节点;S4、前端节点从后端节点可用列表中随机选择一个可用的后端节点,根据步骤S1中建立的后端节点与Redis数据库之间的消息订阅/发布通道,向Redis数据库发布从客户端收到的聊天数据;S5、后端节点通过订阅的Redis的消息订阅通道收到聊天数据,然后由后端节点对该聊天数据进行处理;S6、后端节点通过步骤S1中建立的消息订阅/发布公共通道向所有的前端节点发布本条聊天数据;S7、前端节点收到本条聊天消息后轮询获取所有连接到自己并处于同一聊天会话的客户端,依次将聊天数据发送到客户端;S8、所有处于同一聊天会话的客户端收到聊天数据。2.根据权利要求1所述的基于Redis订阅服务的分布式实时聊天系统的实现方法,其特征在于,所述步骤S2中,客户端与前端节点建立的连接为HTTP长连接。3.根据权利要求1所述的基于Redis订阅服务的分布式实时聊天系统的实现方法,其特征在于,所述步骤S3中,前端节点根据zookeeper的实时心跳探测机制,剔除不可用的节点,保留可用节点。4.根据权利要求1所述的基于Redis订阅服务的分布式实时聊天系统的实现方法,其特征在于,所述步骤S5中,后端节点对消息的处理包括但...

【专利技术属性】
技术研发人员:尹召青
申请(专利权)人:创盛视联数码科技北京有限公司
类型:发明
国别省市:北京,11

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

1