其他分享
首页 > 其他分享> > 跨服务器通信问题的思路——基于发布订阅的消息队列

跨服务器通信问题的思路——基于发布订阅的消息队列

作者:互联网

问题背景

  在我的聊天服务器项目中,尝试使用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