工作线程在第一条消息后不会响应?
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 });
我正在制作一个服务器脚本,为了让主机和客户端更容易地做他们想做的事,我制作了一个可自定义的服务器脚本,该脚本使用 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 });