我正在尝试弄清楚如何水平扩展我的nodejs TCP服务器。
示例服务器:
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
作为负载均衡器来扩展它。但是,如何让我的所有服务器共享相同的连接客户端阵列呢?
粘性会话不是一个适合我的解决方案,因为两个说话的人(两个客户端)可能在不同的服务器上,所以所有服务器都必须以某种方式共享相同的连接客户端阵列。
任何想法如何做到这一点?
我有一个想法:
- 是否可以将每个连接存储在 MySQL 中?
编辑也许实际执行此操作的唯一方法是使用 Redis
?任何想法是否是一个合适的选择?负载将非常重
1.使用 Redis 与您的服务器共享您的会话。
2.编写登录服务器,所有用户都应登录登录服务器。首先。登录服务器将生成一个会话,并在 Redis 服务器上共享会话并返回事务服务器 ip 和端口,
其次,客户端接收IP和端口,断开登录服务器,并连接到事务服务器,
最后,你可以提供几个TCP服务器来处理事务,登录服务器将通过ip和端口来平衡负载。 当然,你可以使用haproxy来做到这一点,但我不知道如何配置它。