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

标签 node.js

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

最佳答案

Node 当前不直接支持共享内存,这反射(reflect)了 JavaScript 完全缺乏语义或对线程/共享内存处理的支持。

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

无论如何,您描述的场景最好通过简单地使用 child_process.fork 并通过提供的通信 channel (使用序列化)发送(看似最少的)数据量来实现。

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

编辑:假设您使用 node-ffi 来弥补差距,仅从 JS 就有可能。

关于node.js - 运行 node.js 的两个进程之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8958497/

相关文章:

node.js - 将nodejs部署到OpenShift,目录结构如下

javascript - ExpressJS/NodeJS/ promise : Return early from promise chain

javascript - Node.js 错误 ENOENT,未更改任何内容时打开 "file/path"

node.js - 如何使用 Axios 从 React 发送数据并在 express 中使用请求主体?

arrays - 如何在node js中的mongodb查询中传递var

node.js - 使用 NPM 安装包会导致依赖循环

javascript - Node JS 和 Webpack 意外 token <

javascript - Node.js Express 应用程序无法从 dropzone.js 回调重定向

node.js - mongoose doc.save 在模式方法中没有错误地失败

javascript - 这两行代码有什么区别?