NodeJS中的HTML5 Web Worker?

时间:2013-01-25 13:14:41

标签: html5 node.js web-worker

任何人都知道NodeJS中Web Worker支持的状态是什么?我找到了一个两年前的实现,node-webworkers,但它没有运行当前版本的NodeJS。

4 个答案:

答案 0 :(得分:6)

现在有https://github.com/audreyt/node-webworker-threads似乎在积极维护。

答案 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));
}