使用redis解决用户跨服务器通信

在这里插入图片描述

我们在集群聊天服务器中涉及的通信是:一对一的聊天,群聊。如上图所示,client1登录在chatserver1上,client2登录在chatserver2上,client3登录在chatserver3上。
按我们现有的单台服务器业务来说,我们在每一台服务器上都有_userConMap,当client1给client2发送聊天消息的话,在chatserver1上的_userConMap肯定是找不到client2的connection。

在集群环境中,我们服务器的代码在业务逻辑上应该做修改,客户端完全不用改动,因为客户端不用去了解服务器有几台。我们要继续判断,如果当前client1所要聊的client2并不在这台chatserver1的机器上,就要去数据库找client2用户的一个在线状态,如果是offline,说明client2确实不在线,直接按照原来的逻辑发送离线消息就可以了,如果是在数据库查到client2的状态是online,是在线的,不在这台主机上的_userConMap而已,只是登录在集群的其他的服务器上,如果是这种情况,如何聊天呢?client1根本不知道client2的connection是什么。

有一种解决方式是让这几台服务器之间建立连接,即这几台服务器承担着客户端和服务端这两种角色。这样的设计使得各个服务器之间耦合度太高,不利于系统扩展,并且会占用系统大量的socket资源,各服务器之间的带宽压力很大,不能够节省资源给更多的客户端提供服务,因此绝对不是一个好的设计。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值