其他信息:
我是angular和node.js的新手。
我不想在后台进程中运行带有自己事件的服务器,并告诉它何时开始和停止。
问题描述:
我知道child_process中的fork方法,但这对于带有ts文件的角度不起作用,因为它们被编译成一个大的js文件,当我使用js文件时,我无法使用我的TypeScript类。
我正在阅读有关angulars component interaction的内容,这听起来像是一个像处理结构一样的父子,但他们不会写出它是不是。
问题:
那么如何在角度4中使用多线程(以实现我在其他信息中描述的内容)?
问题更新:
我测试了角度模块中的集群模块,而cluster.fork()第二次没有运行角度模块,换句话说到目前为止我无法使集群处理角度。
我用来测试Angular中的集群的简单测试函数(代码部分来自官方示例):
export function test() {
console.log(String(cluster.isMaster) + String(cluster.isWorker));
if (cluster.isMaster) {
cluster.fork();
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
});
} else {
var bs: BluetoothServer = new BlenoBluetoothServer("12ab");
let counter = 0;
let discover = setInterval(() => {
counter++;
if (counter > 1) {
if (!bs.isAdvertising())
bs.startAdvertising();
}
}, 1000);
// Worker processes have a http server.
http.createServer(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(7777);
}
}
更新2
作为一种解决方法,我使用child_process.fork()并将脚本添加到webpack。 在webpack捆绑之后,我正在尝试访问捆绑中的Class但是我没有定义EntryPoint。我正在关注this回答。
那么我怎样才能访问捆绑代码中的类?
我的webpack.config.js的输出配置部分
"output": {
"path": path.join(process.cwd(), "dist"),
"filename": "[name].bundle.js",
"chunkFilename": "[id].chunk.js",
"library": "EntryPoint",
"libraryTarget": "var"
},
我在后台运行的简单js文件:
const bundle = require('./polyfills.bundle.js');
var objectInstance = new bundle.EntryPoint.NobleBluetoothClient();
process.on('message', (message) => {
process.send("received message");
});
我如何从Angular中调用它:
let clientSubprocess: ChildProcess = runJSinBackground(electronService);
clientSubprocess.on('message', (message) => {
console.log(String(message));
})
clientSubprocess.send("TEST");
Angular中运行fork的函数:
export function runBluetoothClientInBackground(electronService: ElectronService):ChildProcess {
let clientSubprocess: ChildProcess = electronService.childProcess.fork(__dirname+'/scripts.bundle.js');
return clientSubprocess;
}
SOLUTION:
问题是,我试图只将一个入口点(webpack入口点)作为库访问,但这是不可能的(或者需要一个hack)。
您可以将其他配置添加到webpack.conf
示例中描述的同一webpack --display-entrypoints
。
您还需要以正确的顺序要求webpack块。
要找出您需要加载块的顺序(如果有的话),请运行setInterval(function {/* do something */}, 50000)
。
由于这些是多个问题,因此最好关闭此问题。