我正在一个项目中,该项目将包括移动应用程序,桌面应用程序和服务器。服务器将始终需要保持桌面应用程序的开放套接字(dropbox如何做到!!)。打开移动应用程序后,将在移动应用程序和服务器之间打开一个套接字,而桌面应用程序会将事件发送到移动应用程序(可能是相当低的带宽),反之亦然。

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

我无法解决的问题是处理nodejs和集群api。由于群集API产生了一个单独的nodejs进程,我将如何在分支的进程之间共享websocket连接?如果无法执行此操作,则必须以某种方式确保移动Websocket在打开桌面客户端Websocket的同一节点进程上打开。不知道我能做到这一点。

我有什么选择?

最佳答案

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

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

如果看起来有些复杂,那么可以使用一些模块来为套接字引用创建一个“存储”,并使它们在所有集群实例中都可用

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

还有其他几个可用的模块,这些模块使在群集中轻松使用套接字,只需确保它们使用某种形式的“粘性会话”,而不仅仅是基本的Redis存储,因为这显然存在一些扩展问题。

关于node.js - 在Node.js fork 的进程之间共享数千个开放式WebSocket,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28129377/

10-14 18:28
查看更多