我正在扩展我的Nodejs服务器,它运行一个SockJS服务器。这是一个基本的聊天,其中SockJS服务器存储每个连接的客户端。
基本上我是这样存储的:
var clients = [];
var sockets = {};
// Identify this client
socket.name = socket.remoteAddress + ":" + socket.remotePort
// Put this new client in the list
clients.push(socket);
sockets[socket.name] = socket; 这就是我写入套接字的方式:
sockets[socketName].write("{\"type\":\"type\", \"msg\": \"" + escp(obj.msg) + "\", \"name\": \"" + obj.name+ "\", \"location\": \"" + obj.location + "\"}");我的想法是现在扩大规模,在亚马逊上启动更多的实例。我会让HAProxy在前排装东西。
问题是聊天的两个人必须在同一个实例上,因为connectedClients在我的ec2 instances之间共享。
有什么办法可以做到这一点吗?我需要在数据库中存储connectedClients吗?(这有可能吗)?
基本上我需要在我的实例之间共享sockets和clients
发布于 2020-01-23 23:19:04
我认为您可能必须将会话连接存储在redis/mongodb中,并让这些节点服务器对redis执行发布/订阅操作,以便在整个节点上拥有一致的请求/response。因此,当用户向HAProxy发送消息时,无论HAProxy路由到哪个服务器,如果存在现有连接,则向该节点的请求具有签入redis。
https://stackoverflow.com/questions/20242378
复制相似问题