我们的客户有一个非常具体的体系结构,它限制了连接的可能性。这是一个带有React和NodeJS的聊天机器人,将Socket.IO用于我们的websocket。在套接字服务器之上,有一个强制性的HAProxy配置为使用循环负载平衡,因此客户端每次都将连接到其他套接字服务器。该应用程序可以在单个Socket实例上正常运行,但是当添加第二个Socket实例时,我们注意到套接字事件是随机到达每个实例的,并且响应事件只返回给客户端的情况很小。
除前端客户端外,还有一些工作客户端处理来自队列的请求。这些也表现不正常,即使没有事件要发送(这可能是一个单独的问题),也要与每个套接字服务器连接和断开连接。
我们正在像这样使用redis-adapter
this.io.adapter(this.redis({ host: this.redis_host, port: this.redis_port, password: this.redis_password }));
我正在使用传输器:['websocket','polling'],但是我们尝试了所有这些组合。
我们也使用这样的房间:
前端客户端在初始化时被添加到会议室:
initialize() {
this.io.on(this.SocketConstants.CONNECTION, (client) => {
const UniqueId = this.getId(client)
client.join(UniqueId);
}
工人的回应被发送到房间:
client.on(this.SocketConstants.SEND_TO, async (data) => {
this.io.to(data.UniqueId).emit(this.SocketConstants.RESPONSE, data);
});
这是否有可能实现?如何确保Redis在服务器之间正确共享socketId和房间?