node.js - 使用编程 API 将数据发送到 PM2 进程

标签 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);
});

最佳答案

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

关于node.js - 使用编程 API 将数据发送到 PM2 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35478748/

相关文章:

node.js - pm2中配置参数在控制台显示颜色

node.js - 使用socket.io、nodejs和mongodb处理聊天系统

node.js - 调试 Node 集群中的杂散未捕获异常 (ECONNRESET)

node.js - aws sdk ec2.describeInstances 未列出所有 EC2 实例

node.js - PM2可以运行命令行启动脚本吗?

javascript - 使用pm2时如何自动重新加载Node.js项目

go - Golang 应用程序的类似 PM2 的进程管理解决方案?

node.js - 如何使用 flighplan 重新加载/重新启动 pm2 并了解符号链接(symbolic link)目录?

node.js - Node js - Bcrypt - 比较方法为正确的输入密码返回false

javascript - JavaScript 回调的效率