跨服务器通信问题的思路——基于发布订阅的消息队列
作者:互联网
问题背景
在我的聊天服务器项目中,尝试使用nginx的tcp负载均衡来提升多并发的能力,与此同时也带来了另一个问题。因为有了多台服务器,就必须要解决跨服务器通信的问题。
在服务器中有一个_userConnMap,用于存储当前在线用户及其TcpConnection
问题解决思路&&步骤
假设当前处理client1业务的服务器是Chatserver1,处理client2业务的服务器ChatServer2。client2和client2是好友关系,如果用户1想要给用户2发送消息,就属于跨服务器通信。
大致处理步骤如下:
1.在当前服务器的_userConnMap中查找client2的id,如果找到了,就说明client2也在这一台服务器上,直接通信就行。
2.如果当前_userConnMap找不到client2,就在数据库中查询client2的状态,如果是offline,就将消息存入数据库。
3.如果其状态是online,则说明client2登录在其它服务器上,需要引入中间件消息队列,来处理。
redis环境安装和配置
1.使用sudo apt-get install redis-server,安装redis服务
2.ps - ef | grep redis 查看redis服务是否启动了
3.启动redis-cli客户端,测试redis的数据缓存功能
redis的发布-订阅机制:发布-订阅模式包含两种角色,分别是消息的发布者和消息的订阅者。订阅者可以订阅一个或者多个channel,发布可以向指定channel发送消息,所有订阅此channel的订阅者都会收到此消息。
订阅channel的命令 :subscribe channel
发布channel的命令 :publish channel massage
标签:订阅,队列,client2,redis,消息,服务器,channel 来源: https://blog.csdn.net/qq_39515533/article/details/116758979