gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:42 25 4
gpt4 key购买 nike

我正在制作一个服务器脚本,为了让主机和客户端更轻松地执行他们想要的操作,我制作了一个使用 nw.js(带有可视界面)运行的可自定义服务器脚本。由于 nw.js 在支持工作线程方面存在问题,因此该脚本是使用 Web Workers 编写的。

既然 NW.js 解决了工作线程的问题,我一直在尝试将 Web Worker 内部的所有内容移至工作线程,但存在一个问题:当主线程收到第二个线程的答案时,后者将停止响应任何后续消息。

例如,使用 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');

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

最佳答案

因为你使用了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 });

关于node.js - 工作线程在第一条消息后不会响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60472041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com