一尘不染

实时应用新手-Node.JS + Redis或RabbitMQ->客户端/服务器如何?

redis

我是实时应用程序开发的新手,正在尝试围绕那里的众多选择进行研究。我已经读了很多博客文章,笔记和文章,人们已经很好地分享了。然而,我的小脑子似乎还没有解决一个简单的问题。我以为其他许多人可能也有同样的问题,所以我不妨在此处签名并发布。开始:

我正在构建一个微型实时应用程序,它是异步聊天+另一个有趣的功能。我将选择归结为以下两个选项:

  1. 灯泡+ RabbitMQ
  2. Node.JS + Redis + Pub-Sub

我相信我已掌握了开始学习和推广的基础知识。但是,我的问题(严重是n00b)是:

  • 在这两个方面,我如何与最终用户->客户端与服务器进行通信?那将是简单的Javascript长/无限轮询吗?
  • 在这两个中,从单个Slice(假设有100-1,000个用户)进行构建和管理,哪个更有效?
  • 我是否应该在“老派”范例中使用jQuery构建所有内容,然后确定哪个堆栈更有意义?这样我就可以将产品充实为原型,然后对其进行“优化”。还是在编写中不仅仅是优化?(我是这样,但我个人并不是100%)

我希望这不是一个疯狂的问题,不会马上被解雇。希望有一些建设性的反馈意见,喜欢这个社区!

谢谢。


阅读 231

收藏
2020-06-20

共1个答案

一尘不染

从结构上讲,这两种选择都与将数据存储在Oracle数据库服务器中以供另一个应用程序检索相同。

RabbitMQ和Redis解决方案都要求您的应用程序连接到处理数据通信的中间服务器。Redis最像Oracle,因为它可以简单地用作具有网络API的持久数据库。但是RabbitMQ有所不同,因为MQ
Broker并不真正负责持久化数据。如果您配置正确并在发布消息时使用正确的选项,那么RabbitMQ实际上将为您保留数据,但您不能取出数据,除非作为正常消息排队过程的一部分。换句话说,RabbitMQ用于传递消息,并且仅提供持久性作为从网络问题或系统崩溃中恢复的一种方式。

我建议您使用RabbitMQ以及您已经熟悉的任何编程语言。由于LAMP中的M通常被解释为MySQL,这意味着您要么根本不使用MySQL,要么仅将其用于数据的长期存储,而不用于实时通信。

RabbitMQ网站上有大量有关使用AMQP构建应用程序的文档。我建议您在安装RabbitMQ之后,仔细阅读的文档rabbitmqctl,然后创建一个vhost要进行实验的方法。这样一来,无需重置所有内容即可轻松清理实验。我还建议仅使用主题交换,因为您可以通过在routing_key中使用通配符来模拟直接交换和扇出交换的行为。请记住,您只发布要交换的消息,并且只从队列接收消息。交换负责将消息的routing_key与队列的binding_key进行模式匹配,以确定哪些队列应接收消息的副本。值得学习整个AMQP模型,即使您仅打算将消息发送到一个与routing_key同名的队列。

如果要在浏览器中构建客户端,并且要构建原型,则应该考虑立即使用XHR,然后再转到Kamaloka-
js之类的东西,它是AMQP(AMQ协议)的纯Javascript实现,是用于与RabbitMQ消息代理进行通信的标准协议。换句话说,用您今天所了解的知识来构建它,然后在以后加快它在工具箱中具有长期前景的东西(AMQP)。

2020-06-20