gpt4 book ai didi

node.js - 如何在多个 Node js服务器之间发出消息

转载 作者:可可西里 更新时间:2023-11-01 11:24:19 24 4
gpt4 key购买 nike

因为我是新手,需要一些帮助。我需要在许多 nodeJS 服务器之间发送消息。我需要服务器到服务器的通信,而不是服务器到浏览器的通信(我发现的最多模式是什么)。对于我阅读的内容,我可能需要 redis。我已经安装好它并且可以接受连接了。如果我从 socket.io 尝试这段代码

var io = require('socket.io')(3000);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));
io.emit('hi', 'all sockets');

...没有任何反应。任何建议缺少什么或我可以实现的其他模式?谢谢!

最佳答案

您可以尝试使用 RabbitMQ 进行消息传递。

在构建需要扩展的应用程序时,RabbitMQ 是一个非常强大的概念。在构建分布式系统时,使用工作队列将工作生产者与消费者(工作人员)分开是一种常见的模式。

  • 消息由生产者发送
  • 消息传递给消费者
  • 消息通过 channel

enter image description here

有许多消息传递模式,它们被写得令人作呕。 RabbitMQ 上下文中两个值得注意的消息传递模式是竞争消费者和远程过程调用。

将 Rabbit MQ 与竞争消费者消息传递模式结合使用

为了说明,请考虑需要导入大量数据的用户。处理这些数据是一项 CPU 密集型任务。一个天真的实现可能是:

  • 用户上传数据(请求)
  • 服务器处理数据
  • 用结果回应用户(回复)

如果您尝试使用 Node.js 进程直接处理此数据,您将阻塞事件循环。任何在数据处理过程中进来的请求都必须等待,这是不好的。系统没有反应。更好的方法是:

  • 用户上传数据(请求)
  • 服务器向队列发送消息
  • 向用户发送一条响应,其中包含一条消息,表明已成功接收数据并将对其进行处理(回复)。

发送到队列的消息包含所有必需的信息(用户信息、文件位置等),并将由可用的消费者( worker )拾取和处理。数据处理完毕后,将通知用户。这种方法(即发即弃)有几个优点:

  • 服务器能够立即处理其他请求
  • 如果当时没有可用资源,处理将延迟
  • 如果第一次失败则重试处理

在上面的示例中,我们应用了竞争消费者模式。当队列中有消息时,任何消费者都可能收到它。简单地说,消费者之间相互竞争成为消息接收者。 enter image description here

关于node.js - 如何在多个 Node js服务器之间发出消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52180473/

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