具有实时通知架构的 Rails

Posted

技术标签:

【中文标题】具有实时通知架构的 Rails【英文标题】:Rails with real time notifications architecture 【发布时间】:2015-11-21 18:22:01 【问题描述】:

我需要向我的 Rails 应用程序添加实时通知。以下是我发现的不同的可能架构。

1。 Rails + Socket.io + Redis:正如post 中所建议的那样,具有以下架构:

专业版:干净,如果 Socket.io 关闭,不会丢失任何数据 缺点:引入了多种技术(增强了可维护性)

2。 Rails + Socket.io:让 Rails 成为 Socket.io 客户端,就像这个 repo 所做的那样:https://github.com/lyondhill/socket.io-ruby-client

专业版:直截了当 骗局:依赖一个不受欢迎的库

3。鲁比菲:http://faye.jcoglan.com/ruby.html

专业版:100% 红宝石 缺点:由于需要外部应用程序,因此 Socket.io 现在比 Faye 更像是一个行业标准。

4。 ActionController::Live: http://edgeapi.rubyonrails.org/classes/ActionController/Live.html

专业版:应用方式中的 Rails 缺点:太不成熟了

问题:

现在有标准方法(我会错过)吗? 对我的比较有什么想法(希望不要关闭)?

【问题讨论】:

【参考方案1】:

看看Plezi(这是我自己的宠物项目,所以我可能会有偏见)。

虽然它也可以用作一个独立的框架,但很容易将其设置为 Rails 插件或 Redis 的 socket.io 替代品。

如果您将服务器切换到 Plezi 的首选服务器(只需从 gemfile 中删除对其他服务器的引用),您可以编写一个 Plezi websocket 控制器并让它与您的 Rails 应用程序在同一进程(相同的 ip:port)上运行.

另一种选择是将 Plezi 作为独立进程运行(在不同的端口上)并使用 Redis 同步它们(使用 Plezi 的 Placebo API)。

Plezi 的文档中有一段标题为:“Using Plezi with our existing Rack application”

Pro:使用本机 websocket 实现(服务器端 websockets)和快速 C 扩展服务器(碘)。与您的 Rails 应用程序完全集成是可能的(在同一域/进程/ip/端口上同时提供 websockets 和 HTTP);轻松扩展(自动 redis 支持)。

缺点:年轻;需要 C 扩展支持(Ruby MRI)和 Linux / BSD / OS X 机器(无 windows);共享代码需要是线程安全的(websocket 可能与 HTTP 或其他连接并行运行)。

祝你好运!

【讨论】:

我去看看,但你应该提前提到你是项目的开发者! @AugustinRiedinger - 抱歉,我有时会忘记提及这是我的宠物项目......我现在会修正我的答案。【参考方案2】:

你一定要看看https://github.com/rails/actioncable

Action Cable 将 websocket 与 Rails 应用程序的其余部分无缝集成。它允许以与 Rails 应用程序的其余部分相同的样式和形式用 Ruby 编写实时功能,同时仍然具有高性能和可扩展性。它是一个提供客户端 javascript 框架和服务器端 Ruby 框架的全栈产品。您可以访问使用 ActiveRecord 或您选择的 ORM 编写的完整域模型。

【讨论】:

“Action Cable 目前被认为是 alpha 软件。”【参考方案3】:

看看 eventmachine 和 websockets。还有第三方服务,例如 Pusher 和 PubNub,将通过 HTTP API 为您处理 websocket 部分。

https://github.com/igrigorik/em-websocket

Rails 5 还将添加 ActionCable,它会在 Rails 中执行此操作,但还没有推出。

我想说这些方法的优点是您不需要单独的 node.js 应用程序。这些服务非常易于使用,但不是免费的。

【讨论】:

以上是关于具有实时通知架构的 Rails的主要内容,如果未能解决你的问题,请参考以下文章

创建实时通知系统的不同选项

来自具有PubNub,可伸缩性和超过9000个聊天室的后端的实时用户通知

创建具有不同列名的 Rails 关联

流数据架构

向存储的实时数据库发送推送通知

inotify+rsync实现实时同步并邮件通知