我正在扩展运行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? (那有可能)吗?

基本上我需要在实例之间共享socketsclients

最佳答案

我认为您可能必须将会话连接存储在redis / mongodb中,并让那些节点服务器对redis进行发布/订阅,以便在整个节点上具有一致的请求/响应。因此,当用户向HAProxy发送消息时,无论HAProxy路由在哪台服务器上,到该节点的请求都将具有签入Redis(如果存在现有连接)。

关于node.js - 扩展SockJS跟踪客户,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20242378/

10-12 15:31