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

iUs*_*ble 14 apache publish-subscribe rabbitmq redis node.js

我是实时应用程序开发的新手,我正试图围绕无数的选项.我已经阅读了很多博客文章,笔记和文章,人们已经很友好地分享了.然而,一个简单的问题在我的小脑中似乎没有答案.我认为其他一些人可能会遇到同样的问题,所以我不妨在SO上注册并发布.开始:

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

  1. LAMP + RabbitMQ
  2. Node.JS + Redis + Pub-Sub

我相信我已经掌握了开始学习和构建它的基础知识.但是,我(严重的n00b)问题是:

  • 我如何与最终用户 - >客户端与服务器进行通信?这是简单的Javascript长/无限轮询吗?
  • 在这两个中,从单个Slice(假设100-1,000个用户)构建和管理可能更有效率?
  • 我是否应该在"旧学校"范例中使用jQuery构建所有内容,然后确定哪个堆栈可能更有意义?这样我就可以将产品作为原型充实,然后"优化"它.或者只是在优化中写一个而不是另一个?(我感觉如此,但我个人并不100%)

我希望这不是一个疯狂的问题,不会立即被焚烧.会喜欢一些建设性的反馈,喜欢这个社区!

谢谢.

Mic*_*lon 21

从架构上讲,两种选择都与在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进行模式匹配,以确定哪些队列应该接收消息的副本.即使您只计划将消息发送到与routing_key同名的一个队列,也值得学习整个AMQP模型.

如果你在浏览器中构建你的客户端,并且你想构建一个原型,那么你应该考虑今天只使用XHR,然后转向像Kamaloka-js这样的AMQP(AMQ协议)的纯Javascript实现.是用于与RabbitMQ消息代理通信的标准协议.换句话说,用你今天所知的东西来构建它,然后在你的工具箱中加速具有长期未来的东西(AMQP).