任何人都知道NodeJS中Web Worker支持的状态是什么?我找到了一个两年前的实现,node-webworkers,但它没有运行当前版本的NodeJS。
答案 0 :(得分:6)
答案 1 :(得分:3)
您可以使用child processes,解决类似问题。
答案 2 :(得分:1)
您可以查看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辅助代码并确定处理消息的要点。
答案 3 :(得分:0)
Worker Threads在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)); }