扩展SockJS跟踪客户

时间:2013-11-27 12:21:28

标签: node.js

我正在扩展运行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 + "\"}");

我的想法是现在扩展并在亚马逊上启动更多实例。我会在前面加HAProxy来填充负载。

问题是两个人聊天都必须在同一个实例上,因为在我的ec2 instances之间共享了connectedClients。

任何想法如何实现这一目标?我是否需要将connectedClients存储在数据库中? (这是可能的吗?)

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

1 个答案:

答案 0 :(得分:0)

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