我们知道粘性会话使用 IP 地址的哈希来使每个客户端连接到同一个集群(或进程)。相反,我使用具有相同原理但更好的粘性集群。
那么……如果移动设备的 IP 发生变化怎么办? 我们也知道每一个移动设备移动,它的 IP 都可能改变。如果发生这种情况,握手协议将被破坏。
就我而言,因为我必须使用 socket.io 来制作 messenger 应用程序,所以我必须解决这个问题。
实际上,我向粘性集群开发人员 Denis Zhbankov 发送了电子邮件,他说
这是粘性会话的一个缺点,但是主人应该决定哪个工人在没有实际读取数据(标头,cookie ......)的情况下接收连接......不幸的是没有解决方案......所以我来到了这里。
但我试图找到解决方案。我希望它会帮助你提示。
function serverCreate () {
var hash = require('string-hash');
return require('net')
.createServer({ pauseOnConnect: true }, function (connection) {
var index = hash(connection.remoteAddress || '') % CONCURRENCY;
workers.entrust(index, connection);
});
}
这是粘性集群的代码示例。如您所见,它使用 ip 哈希,获取 idx,并将连接传递给工作人员 [idx]。(平衡)
在这里,我认为连接(参数)会有一些唯一标识符,可以代替ip。所以我解开了连接(套接字)对象。但是没有什么可以代替 ip ......
这太愚蠢了!:D
如果您有解决此问题的任何想法,请回答任何问题..;)
简短:使用粘性会话时,即使客户端 IP 在移动设备中发生变化,如何使客户端连接到同一个集群。