gpt4 book ai didi

node.js - 使用 NodeJS 跨多个进程进行实时消息传递

转载 作者:太空宇宙 更新时间:2023-11-04 02:43:46 24 4
gpt4 key购买 nike

我正在尝试实现一个与 NodeJS 服务器交互以进行实时消息传递的 API。现在,当该 NodeJS 应用程序部署到像 Heroku 这样的可扩展环境时,该应用程序的多个实例可能正在运行。

是否可以设计 Node 应用程序,以便订阅“消息 channel ”的所有客户端都将收到此消息,尽管多个 Node 实例正在运行 - 因此该 channel 的多个副本?

最佳答案

查看zeromq ,它应该提供一些简单、高性能的 IPC 抽象来完成您想要的操作。特别是the pub/sub example会有用的。

正如我想象的那样,在不知道 Heroku 如何生成多个服务器实例的情况下,主要挑战将是确定谁是发布者的逻辑(其余实例将是订阅者)。因此,为了便于论证,假设您的托管提供商为您提供了一个名为 INSTANCE_NUM 的环境变量,它是 [0,1024] 中的一个整数,指示进程的实例编号;所以我们会说实例 0 是消息发布者。

var zmq = require('zeromq')
if (process.env['INSTANCE_NUM'] === '0') { // I'm the publisher.
var emitter = getEventEmitter(); // e.g. an HttpServer.
var pub = zmq.createSocket('pub');
pub.bindSync('tcp://*:5555');
emitter.on('someEvent', function(data) {
pub.send(data);
});
} else { // I'm a subscriber.
var sub = zmq.createSocket('sub');
sub.subscribe('');
sub.on('message', function(data) {
// Handle the event data...
});
sub.connect('tcp://localhost:5555');
}

请注意,我是 Zeromq 的新手,上面的代码完全未经测试,仅供演示。

关于node.js - 使用 NodeJS 跨多个进程进行实时消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9489627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com