我们知道粘性会话使用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,并将连接传递给worker [idx]。 (平衡)
在这里,我以为会有一些唯一的标识符,可以在连接(参数)中替换ip。所以我解开了连接(Socket)对象。
但没有什么可以取代IP ......这是愚蠢的! :d
如果您有任何想法可以解决这个问题,请回答任何问题..;)
简短:在使用粘性会话时,如何让客户端连接相同的群集,甚至移动设备中的客户端IP更改。