当前位置: 首页 > 面试题库 >

NodeJS |集群:如何将数据从母版发送到所有或单个子女/工人?

贾实
2023-03-14
问题内容

我有来自节点的工作(股票)脚本

var cluster = require('cluster');
var http = require('http');
var numReqs = 0;

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < 2; i++) {
    var worker = cluster.fork();

    worker.on('message', function(msg) {
      if (msg.cmd && msg.cmd == 'notifyRequest') {
        numReqs++;
      }
    });
  }

  setInterval(function() {
    console.log("numReqs =", numReqs);
  }, 1000);
} else {
  // Worker processes have a http server.
  http.Server(function(req, res) {
    res.writeHead(200);
    res.end("hello world\n");
    // Send message to master process
    process.send({ cmd: 'notifyRequest' });
  }).listen(8000);
}

在上面的脚本中,我可以轻松地将数据从worker发送到主进程。但是如何将数据从主机发送到工人?举例说明,如果可能的话。


问题答案:

由于cluster.fork是在child_process.fork之上实现的,因此您可以使用来将消息从主服务器发送到工作服务器,而可以通过将消息从worker.send({ msg: 'test' })工作服务器发送到主服务器process.send({ msg: 'test' });。您会收到以下消息:(worker.on('message', callback)从工作人员到主服务器)和process.on('message', callback);(从主服务器到工作器)。

这是我的完整示例,您可以通过浏览http:// localhost:8000
/进行测试,
然后工作人员将消息发送给主服务器,主服务器将回复:

var cluster = require('cluster');
var http = require('http');
var numReqs = 0;
var worker;

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < 2; i++) {
    worker = cluster.fork();

    worker.on('message', function(msg) {
      // we only want to intercept messages that have a chat property
      if (msg.chat) {
        console.log('Worker to master: ', msg.chat);
        worker.send({ chat: 'Ok worker, Master got the message! Over and out!' });
      }
    });

  }
} else {
  process.on('message', function(msg) {
    // we only want to intercept messages that have a chat property
    if (msg.chat) {
      console.log('Master to worker: ', msg.chat);
    }
  });
  // Worker processes have a http server.
  http.Server(function(req, res) {
    res.writeHead(200);
    res.end("hello world\n");
    // Send message to master process
    process.send({ chat: 'Hey master, I got a new request!' });
  }).listen(8000);
}


 类似资料:
  • 正如大家所知,我是JavaScript和Electron的完全初学者。 我想我已经找过大多数地方了,但我什么也没找到。 IDK怎么办 有什么建议吗?

  • 问题内容: 我是Rails和Web开发的新手。 我正在Matlab中生成一堆对象,我想将这些对象发送到我的Rails应用程序中的数据库中。谁能建议我该怎么做? 到目前为止,在Rails端,我已经为数据生成了基本的支架。我可以使用“ / myobjects / new”中的表单将对象添加到数据库中。 在Matlab端,我一直在尝试使用HTTP POST请求添加对象,如下所示: 这将失败,并将以下内容

  • 我有一个片段,它打开一个对话框fragment来获取用户输入(一个字符串和一个整数)。我该如何将这两样东西送回碎片? 这是我的对话片段: 我需要在单击按钮之后和 以下是数据需要发送到的片段: 因此,一旦用户在Dialogfragment中选择日期,它必须返回月份和年份。 然后,按钮上的文本应更改为用户指定的月份和年份。

  • 我需要将数据从片段发送到另一个活动 我在Homeactive下的LoadsFraank中使用此代码 在另一个活动(LoadActivity)中接收数据 但是意图没有附加条件 请看下面的截图

  • 问题内容: 我正在做一个示例项目,其中我想将数据从iPhone发送到WatchKit。我不知道该怎么做。任何帮助将不胜感激。提前致谢 问题答案: 在AppDelegate中添加以下方法: 将此添加到Apple Watch Extension中的任何位置: 第一个函数将使用触发并回复参数中的字典。 开发人员论坛: https : //devforums.apple.com/message/10826

  • 我们在一台服务器上托管了一个Hazelcast集群,在同一地区的不同服务器上的不同应用程序使用Hazelcast Jet客户端实例使用管道聚合来自Kafka源的数据。 在这个设置中,Jet client实例是否发送它从Kafka源Hazelcast集群接收的数据,这将涉及大量的IO?或者当我们创建管道时,Hazelcast集群本身创建到Kafka的连接,这个连接来自Jet集群而不是客户端应用程序?