1

我正在制作一个服务器脚本,为了让主机和客户端都能更轻松地做他们想做的事,我制作了一个使用 nw.js(带有可视界面)运行的可定制服务器脚本。所述脚本是使用网络工作者制作的,因为 nw.js 在支持工作者线程方面存在问题。

现在 NW.js 解决了他们与工作线程的问题,我一直在尝试将 web 工作人员内部的所有东西移到工作线程,但是有一个问题:当主线程从第二个线程接收到答案时,稍后停止响应任何后续消息。

例如,使用 NW.js 或 Node.js 本身运行以下代码将只返回一次“pong”

const { Worker } = require('worker_threads');

const worker = new Worker('const { parentPort } = require("worker_threads");parentPort.once("message",message => parentPort.postMessage({ pong: message }));  ', { eval: true });
worker.on('message', message => console.log(message));      
worker.postMessage('ping');
worker.postMessage('ping');

如何配置工作人员,以便在收到第一条消息后继续响应它收到的任何消息?

4

1 回答 1

2

因为你使用EventEmitter.once()方法。根据文档,此方法执行以下操作:

为名为 eventName 的事件添加一次性侦听器函数。 下次触发 eventName 时, 删除此侦听器,然后调用它。

如果您需要您的工作人员处理多个事件,请使用EventEmitter.on()

const worker = new Worker('const { parentPort } = require("worker_threads");' +
   'parentPort.on("message",message => parentPort.postMessage({ pong: message }));',
   { eval: true });
于 2020-03-01T05:30:27.317 回答