如何在防火墙后面处理Socket.io 1.0的粘性会话?

时间:2014-07-29 19:58:06

标签: node.js session nginx cluster-computing socket.io-1.0

我正在尝试使用Rackspace上的群集使用Nginx,Node.js和Socket.io 1.0为自己设置POC。我假设我需要使用群集,因为我希望在需要时可以跨多个服务器进行扩展。我希望每个节点都有自己的实例,到目前为止,我无法看到每个实例都需要出于任何原因相互通信。到目前为止,我认为我需要使用群集,因为我可能有许多客户端连接到此服务器,我希望它能够相应地增长和缩小。我的最终目标是建立一个类似于此处所示的小POC:https://cloud.google.com/developers/articles/real-time-gaming-with-node-js-websocket-on-gcp

我刚刚得到了我认为已建立的新Socket.io 1.0的有效设置,但是当我从路由器后面的不同设备连接时,它们都在我的日志记录中显示相同的PID,我认为这是由于Socket.io所需的粘性会话。我不确定这是否与我们过去使用群集的工作流程相同,但我仍然试图让我的头脑全部卷绕。

首先,我想知道是否需要使用群集和粘性会话,因为只为相同的外部IP发出了1个PID,无论如何要将每台计算机视为自己的实例吗?我不想发回更新该IP背后的所有人的回复。

我的第二个问题是这个,这可能是一个愚蠢的问题,但我还是要问:)在阅读有关如何使粘性会话正常工作时,我一直看到人们说明了"使用粘性会话,如IP地址"。 "喜欢"是什么让我。我似乎发现人们指的是使用带有IP和cookie的粘性会话。你能用其他任何东西来做,比如用户名,发行的令牌或其他什么东西吗?我担心的是,如果有人在移动设备上玩这个并且他们切换塔,那么塔将发布一个新的IP,因此新的PID将被发布,并且基本上玩家游戏丢失了。我明白了吗?

请原谅我,因为我是Node.js的新手,但认为这将是学习node.js和云集群的一种很酷的方式。任何人都可以提供的任何信息或方向都会有很大的帮助。许多tuts似乎都向所有人广播事件,但我正在寻找一种可扩展的解决方案,其中每个连接可以在大多数时间单独发送事件。当服务器与它们通信时,我还需要解决同一防火墙后面的许多人被视为单独的连接。再次,如果有任何阅读或教程,你觉得可以帮助我socket.io 1.0和我想要做的,请回复。谢谢!

1 个答案:

答案 0 :(得分:1)

一般情况下,因为您使用websockets,只要连接没有终止,您就不必担心粘性。此通信是双向的,http连接保持活动状态。如果连接断开,客户端基本上是重新连接并重新开始。所以,如果任何人的IP更新,你现在将获得一个新的服务器套接字。

请参阅文章using-multiple-nodes,其中说明了对XHR / JSONP长轮询客户端的要求。

我不相信nginx具有按照nginx load-balancing技术对MAC地址等负载进行平衡的功能。

我在想您可能需要一个可以使用MAC地址,虚拟端口ID或某些标头进行路由的可靠负载均衡器。