nodejs TCP Server的水平缩放

时间:2013-12-22 15:39:03

标签: node.js

我正在试图弄清楚如何横向扩展我的nodejs TCP Server。

示例服务器:

var socketServer = net.createServer(function (socket) {

        // Identify this client
        socket.name = socket.remoteAddress + ":" + socket.remotePort

        // Put this new client in the list
        clients.push(socket);
        sockets[socket.name] = socket;


        // Handle incoming messages from clients.
        socket.on('data', function (data) {

                // Write to a specific user
                var socketName = "xx.xx.xx.xx:56512";
                sockets[socketName].write("Hello!");

            }

        }).listen(8080);

以下示例将每个新连接存储在一个数组中,以便我们可以在未来向特定用户写入消息。

我想用haproxy作为负载均衡器来缩放它。但是,如何让我的所有服务器共享相同的连接客户端阵列?

Stickysessions不是一个对我有用的解决方案,因为两个人说话(两个客户端)可能在不同的服务器上,所以所有服务器都必须共享相同的连接客户端阵列。

任何想法如何做到这一点?

我有一个想法:

  • 是否可以在MySQL中存储每个连接?

修改 也许实际执行此操作的唯一方法是使用Redis? 任何想法,如果这是一个合适的选择?负载将非常沉重

1 个答案:

答案 0 :(得分:1)

1.使用Redis与您的服务器分享您的会话。

2.写入登录服务器,所有用户都应登录Login-Server。 首先,登录服务器将生成一个会话,并在Redis服务器上共享会话并返回事务服务器的ip和端口,

其次,客户端接收ip和端口,断开Login-server,并连接到事务服务器,

最后,您可以提供多个TCP服务器来处理事务,Login-server将通过ip和端口平衡负载。当然,你可以使用haproxy来做到这一点。但我不知道如何配置它。