我正在扩展运行SockJS服务器的Nodejs服务器。它是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 + "\"}");
我的想法是现在扩大规模并在Amazon上启动更多实例。我将在前面放
HAProxy
来减轻负载。问题是两个人聊天都必须在同一实例上,因为connectedClients已在我的
ec2 instances
之间共享。任何想法如何做到这一点?我是否需要在数据库中存储
connectedClients
? (那有可能)吗?基本上我需要在实例之间共享
sockets
和clients
最佳答案
我认为您可能必须将会话连接存储在redis / mongodb中,并让那些节点服务器对redis进行发布/订阅,以便在整个节点上具有一致的请求/响应。因此,当用户向HAProxy发送消息时,无论HAProxy路由在哪台服务器上,到该节点的请求都将具有签入Redis(如果存在现有连接)。
关于node.js - 扩展SockJS跟踪客户,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20242378/