【问题标题】:HTML5 Web Workers in NodeJS?NodeJS 中的 HTML5 Web Worker?
【发布时间】:2013-01-09 11:02:57
【问题描述】:

有谁知道 NodeJS 对 Web Worker 的支持情况如何?我找到了一个两年前的实现,node-webworkers,但它不能在当前的 NodeJS 版本中运行。

【问题讨论】:

    标签: html node.js web-worker


    【解决方案1】:

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

    【讨论】:

    • 这看起来是一个很好的方法来抽象出 child_process 的许多复杂性。以我的经验,那里有很多陷阱,使用某些东西来管理似乎是个好主意
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你可以使用child processes,他们解决了类似的问题。

      【讨论】:

        【解决方案4】:

        您可以查看 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 工作者使用addEventListener 添加了一个message 事件处理程序,因此我在global 中注册了这样一个函数并保存了该处理程序。我还必须提供一个postMessage 实现。最后,我注册了一个调用 HTML5 处理程序的 Node.js 消息处理程序。

        一切都很完美。无需任何特殊依赖,只需查看 HTML5 工作代码并确定它处理消息的点即可。

        【讨论】:

          猜你喜欢
          • 2014-06-24
          • 2012-06-18
          • 1970-01-01
          • 1970-01-01
          • 2012-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-07
          相关资源
          最近更新 更多