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消息订阅服务来传递系统内部消息,可以达到聊天服务节点的分部署部署,从而解决上述存在的三个问题。因此,研制一种分布式结构、可横向扩展和易于实现客户端就近接入的聊天系统及方法是非常必要的,并且该专利技术也有重要的应用前景。
技术实现思路
本专利技术针对上述现有技术存在的问题作 ...
【技术保护点】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。