运行node.js的两个进程之间的通信

我正在编写一个服务器,并决定拆分运行node.js的不同进程之间的工作,因为我听说node.js是单线程的,并且认为这将更好地平行。 应用程序将是一个游戏。 我有一个处理HTML页面的进程,然后是处理玩游戏的客户端之间的通信的其他进程。 客户端将被放置在“房间”中,然后通过服务器使用套接字相互通话。 我遇到的问题是,html服务器需要知道不同的房间是多么充分的正确放置人。 套接字服务器需要更新这些信息,以便维护各个房间的准确表示。 所以,据我所知,html服务器和房间服务器需要共享内存中的一些对象。 我打算在一台(多核)机器上运行它。 有谁知道一个简单的方法来做到这一点? 任何帮助将不胜感激

节点当前不直接支持共享内存,这反映了JavaScript完全缺乏语义或支持线程/共享内存处理。

对于节点0.7而言,即使是最近也可以在实验中使用,在单个进程中运行多个事件循环和JS上下文的能力已经成为现实(利用V8的isolates概念和对libuv的大改动来允许每个进程有多个事件循环)。 在这种情况下,有可能,但仍然不是直接支持或容易的,有某种共享内存。 为了做到这一点,你需要使用一个Buffer或者ArrayBuffer(它们都代表JavaScript堆外部的一块内存,但是可以通过有限的方式访问),然后以某种方式共享一个指向底层V8表示的指针异物。 我知道它可以从一个最小的本地节点模块完成,但是我不确定是否可以单独使用JS。

无论如何,只需使用child_process.fork并通过所提供的通信通道(使用序列化)发送(似乎最less的)数据量即可完成所描述的场景。

http://nodejs.org/docs/latest/api/child_processes.html

编辑:假设你使用node-ffi来填补这个空白,那么只有JS才有可能。

你可能想尝试像Redis这样的数据库。 您可以让一个进程订阅一个通道,在每次需要时监听新的连接并从Web服务器发布。 您还可以有多个进程等待用户,并使用列表和BRPOP订阅等待玩家。

听起来像你不想那样做。

服务和消息传递都是IO绑定的,Node对于单个线程是非常擅长的。 如果您需要对这些消息进行长时间的计算,那么这些消息可能适合单独使用,但即使如此,您也许会对使用单个线程的效果感到惊讶。

如果没有,看看工人。

作为一种stream程通信方法,zeromq也正在stream行起来。 也许值得一瞧。 http://www.zeromq.org/和https://github.com/JustinTulloss/zeromq.node