节点集群 - 用代码替换 worker.js 文件

Node Cluster - replace worker.js file with code

以下示例来自 Node 文档:

import cluster from 'cluster';

cluster.setupPrimary({
  exec: 'worker.js',
  args: ['--use', 'https'],
  silent: true
});
cluster.fork(); // https worker
cluster.setupPrimary({
  exec: 'worker.js',
  args: ['--use', 'http']
});
cluster.fork(); // http worker

将应用程序打包成可再分发的二进制文件时,exec: 'worker.js' 是有问题的,worker.js 必须与 exe 一起打包。有没有办法告诉 cluster 查看一段代码?

当然可以。这是不使用新 .setupPrimary 方法时集群的通常行为。可以使用.fork()env参数来传递参数:

import cluster from 'cluster';

if (cluster.isPrimary) {
  cluster.fork({use: 'https'});
  cluster.fork({use: 'http'});
} else {
  if (process.env.use && process.env.use == 'https') {
    // code for https worker
  } else if (process.env.use && process.env.use == 'http') {
    // code for http worker
  } else {
    console.log("missing 'use' environment variable in worker");
  }
}