我们的NodeJS
(使用套接字和HTTP)项目正由用户(所有人都在同一办公室,同一网络工作)共享同一个公共IP地址。我已经设置了一个粘性会话实现,它根据用户的公共IP地址生成一个哈希值,然后为它分配一个节点工作者。 socket.io
需要这种粘性才能发挥作用。由于所有用户共享相同的公共IP地址,因此哈希总是相同的,因此仅使用一个工作者。所有其他工人都没有被使用: - (
由于我使用的是一个非常低级别的NodeJS&net.createServer
API和pauseOnConnect
选项,因此我无法获得任何其他信息,如标头,Cookie,以便为每个用户创建唯一的哈希值
问题:
这种粘性真的需要吗?我正在使用socket.io-redis
来广播消息。不确定此适配器是否可以帮助我处理套接字连接,并且无需管理明确的粘性。我试过这个,但似乎没有起作用。
是否可以从net.createServer
发出的连接对象中读取标题/ Cookie?我认为这是不可能的,因为它在这个级别上没有任何HTTP实现。
是否可以使用http.createServer
API并将请求对象从主进程传递给worker。这样我就可以读取标题/ cookie并生成一个唯一的哈希。
最坏的情况是,是否可以在代理级别覆盖客户端的IP地址(使用nginx
)并为每个用户设置一些dummuy唯一的IP地址。