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