如何在角4

时间:2017-11-03 15:12:53

标签: javascript node.js multithreading angular

其他信息:

我是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)

由于这些是多个问题,因此最好关闭此问题。

0 个答案:

没有答案