任何人都知道 NodeJS 中 Web Worker 支持的状态是什么?我找到了一个两年前的实现,node-webworkers,但它没有在当前的 NodeJS 版本中运行。
问问题
7686 次
4 回答
7
于 2014-11-07T19:35:57.767 回答
5
工作线程在 12 LTS 中达到稳定状态。使用示例
const { Worker, isMainThread, parentPort, workerData } = require('worker_threads'); if (isMainThread) { module.exports = function parseJSAsync(script) { return new Promise((resolve, reject) => { const worker = new Worker(__filename, { workerData: script }); worker.on('message', resolve); worker.on('error', reject); worker.on('exit', (code) => { if (code !== 0) reject(new Error(`Worker stopped with exit code ${code}`)); }); }); }; } else { const { parse } = require('some-js-parsing-library'); const script = workerData; parentPort.postMessage(parse(script)); }
于 2019-11-17T20:10:02.393 回答
3
您可以使用子进程,它们可以解决类似的问题。
于 2013-01-25T13:28:00.463 回答
2
您可以查看 HTML5 WebWorker 源代码的细节。
稍加注意,您可以通过添加可能看起来像这样的前奏来“纠正” WebWorker 以适应 Node.js 工作者:
const { parentPort } = require('worker_threads')
global.postMessage = function(msg){
parentPort.postMessage(msg)
}
var handler
global.addEventListener = function(kind, callback){
handler = callback
}
parentPort.on('message', msg => {
handler(msg)
})
特定的 HTML5 工作人员使用 添加了一个message
事件处理程序addEventListener
,因此我在其中注册了这样一个函数global
并保存了该处理程序。我还必须提供一个postMessage
实现。最后,我注册了一个调用 HTML5 处理程序的 Node.js 消息处理程序。
一切都很完美。不需要任何特殊的依赖,只需查看 HTML5 工作代码并确定它处理消息的点。
于 2020-10-25T11:38:44.093 回答