将相同的本机模块加载到两个node.js线程中

时间:2018-11-22 15:28:37

标签: node.js multithreading worker

我有一个本地的C ++模块,它是由node.js的工作线程启动的,效果很好。从该节点模块中,我可以调用诸如“ AddToLog()”之类的本机方法,并且效果很好。

我还需要处理Web请求,这是我的难题。因此,我使用express并包含一个文件以在工作线程上启动它。这也可以正常工作-我的本机代码和Express Web服务器都在同时工作。

但是,当我尝试在启动Web服务器的文件中“要求”我的本机模块时,出现一个错误,提示无法注册本机模块。

我遇到了一个根本的限制,即node.js无法在两个不同的工作线程上加载相同的本机模块吗?还是像语法问题一样简单?

我的直觉是我可以通过使模块上下文感知来解决此问题,但是我对此还不了解!

我需要快速线程能够访问模块以绘制其内容。因此,一个线程正在运行一个照明服务器,该服务器收集数据,而另一个服务网络请求描述当前状态……如果可行的话!

// SCRIPT 1
'use strict'

const nightdriver = require('./build/Release/nightdriver.node')
const { Worker }  = require('worker_threads');

function startserver()
{
    nightdriver.addtolog("[index.js] Starting NightDriver Server");
    //nightdriver.startserver();
}

const worker = new Worker("./startweb.js");

nightdriver.addtolog("[index.js] Starting Web Server...");
startserver();

// SCRIPT 2
'use strict'
const nightdriver = require('./build/Release/nightdriver.node')
var express = require('express');
var app = express();

app.get('/', function (req, res) {
    res.send('Hello World');
 })

 var server = app.listen(8081, function () {
    var host = server.address().address
    var port = server.address().port

    console.log("Example app listening at http://%s:%s", host, port)
 })

events.js:167
      throw er; // Unhandled 'error' event
      ^
Error: Module did not self-register.
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:736:18)
    at Module.load (internal/modules/cjs/loader.js:605:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:544:12)
    at Function.Module._load (internal/modules/cjs/loader.js:536:3)
    at Module.require (internal/modules/cjs/loader.js:643:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/Users/dave/OneDrive/Source/Node/nightdriver/startweb.js:2:21)
    at Module._compile (internal/modules/cjs/loader.js:707:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:718:10)
    at Module.load (internal/modules/cjs/loader.js:605:32)
Emitted 'error' event at:
    at Worker.[kOnErrorMessage] (internal/worker.js:332:10)
    at Worker.[kOnMessage] (internal/worker.js:342:37)
    at MessagePort.Worker.(anonymous function).on (internal/worker.js:279:57)
    at MessagePort.emit (events.js:182:13)
    at MessagePort.onmessage (internal/worker.js:84:8)

0 个答案:

没有答案