在nodejs分叉进程之间共享数千个开放的websockets

时间:2015-01-24 19:28:09

标签: node.js websocket

我正在开发一个包含移动应用程序,桌面应用程序和服务器的项目。服务器需要始终使用桌面应用程序维护一个打开的套接字(dropbox如何做到这一点!?)。当移动应用程序打开时,移动应用程序和服务器之间将打开一个套接字,桌面应用程序将向移动应用程序发送事件(可能是相当低的带宽),反之亦然。

服务器的最大障碍是在一台相当适中的服务器上同时打开这么多套接字。大多数情况下,套接字将处于空闲状态,因为人们不会使用该应用程序。我只有一个人,而且我不想在服务器成本上花一大笔钱,所以我想我会选择nodejs,因为它能够以低内存使用率打开大量的websocket(通常我会这样做)使用Java,但我想存在会很快成为一个问题。

我无法解决的问题是处理nodejs和集群api。 由于集群api会产生一个单独的nodejs进程,我如何共享分叉进程之间的websocket连接?如果我不能这样做,我必须以某种方式保证移动websocket在同一个节点进程上打开,它打开了桌面客户端websocket。我也不确定是否可以这样做。

我有什么选择?

1 个答案:

答案 0 :(得分:2)

Socket.io有一些关于如何跨群集使用它的文档,您需要将“引用”存储到可用于所有群集的存储中的可用套接字,然后使用这些存储的引用来确定IP等每个连接用户的。

http://socket.io/docs/using-multiple-nodes/

如果这看起来有点复杂,那么可用的模块为套接字引用创建“存储”并使它们可用于所有集群实例

http://socketcluster.io/#!/
https://github.com/elad/node-cluster-socket.io

还有其他几个模块可用,可以很容易地跨群集使用套接字,只需确保它们使用某种“粘性会话”的实现,而不仅仅是一个基本的Redis商店,因为它显然有一些扩展问题。