我有一个本地的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)