【问题标题】:Sending data to PM2 process using programatic API使用编程 API 将数据发送到 PM2 进程
【发布时间】:2016-02-27 08:38:06
【问题描述】:

我正在尝试将数据从我的主应用程序发送到子进程。我尝试了几种不同的选择,但我目前陷入困境。非常感谢您的建议或指示。

我正在关注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);
});

【问题讨论】:

  • 试试:process.on('process:msg', ....)

标签: node.js pm2


【解决方案1】:

@chrizz1001提供的This solution最终起作用了:

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, ...) 的参数,而不是发送到的字典的一部分

【讨论】:

  • pm2.sendDataToProcessId 使用 pm_id,而不是 pid
猜你喜欢
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多