使用程序化API将数据发送到PM2流程

时间:2016-02-18 10:23:03

标签: node.js pm2

我正在尝试将数据从我的主应用程序发送到子进程。我尝试过几种不同的选择,但我现在卡住了。建议或指示非常感谢。

我正在关注http://pm2.keymetrics.io/docs/usage/pm2-api/

上的文档

index.js:

var pm2 = require('pm2');
var processName = "pm2_app";


console.log("hello world!");
pm2.connect(function(err) {
  if (err) {
    console.error(err);
    process.exit(2);
  }

  pm2.start({
    script    : "pm2_app.js"   // Script to be run
  }, function(err, apps) {

    if(err) {
      console.log(err);
    }
    console.log("app started!");
    pm2.list(function(err, list) {
      console.log("Child process started with pid: " + list[0].pid);
      pm2.sendDataToProcessId({
          type : 'process:msg',
          data : {
            some : 'data',
            hello : true
          },
          id   : list[0].pid
        },
        function(err, res) {
          console.log(err);
          console.log("message sent");
        });

      pm2.disconnect();

    });
  });
});

pm2_app.js:

var start = Date.now();

setInterval(function(){
    console.log(Date.now() - start);
}, 1000);

process.on('message', function(packet) {
    console.log("got message from mr. Rabbit");
    console.log(packet);
});

1 个答案:

答案 0 :(得分:3)

This solution提供的

@chrizz1001最后工作:

<强> index.js

var pm2 = require('pm2');

pm2.connect(function(err) {
  if (err) {
    console.error(err);
    process.exit(2);
  }

  pm2.start({
    script    : "pm2_app.js"   // Script to be run
  }, function(err, apps) {

    if(err) {
      console.log(err);
    }
    console.log("app started!");
    pm2.list(function(err, list) {

      pm2.sendDataToProcessId(list[0].pm2_env.pm_id, {
          type : 'process:msg',
          data : {
            some : 'data',
            hello : true
          },
          topic: "my topic"

        },
        function(err, res) {
          console.log(err);
        });

      pm2.disconnect();
    });
  });
});

<强> pm2_app.js:

var start = Date.now();

setInterval(function(){
    console.log(Date.now() - start);
}, 1000);

process.on('message', function (data) {
   console.log('your actual data object', data.data);
});

诀窍是两件事:

  • id 表示PM2 ID,而非系统/操作系统pid
  • 请注意, id 是sendDataToProcessId(id,...)的参数,而不是
  • 中发送的字典的一部分