工作线程在第一条消息后不会响应?

worker thread won't respond after first message?

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

现在 NW.js 解决了工作线程的问题,我一直在尝试将 Web 工作线程中的所有内容移动到工作线程,但是有一个问题:当主线程收到来自第二个线程的回答,后者停止响应任何后续消息。

例如,运行下面带有 NW.js 或 Node.js 的代码本身将 return "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');

如何配置工作器,使其在收到第一条消息后继续响应收到的任何消息?

因为你使用了EventEmitter.once()方法。根据documentation这个方法做了下一个:

Adds a one-time listener function for the event named eventName. The next time eventName is triggered, this listener is removed and then invoked.

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

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