具有实时通知架构的Rails

时间:2015-08-27 11:28:36

标签: ruby-on-rails sockets websocket actioncable

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

1。 Rails + Socket.io + Redis:正如本post所述,具有以下架构:

Rails + Socket.io + Redis

  • Pro :清理,如果Socket.io关闭则不会丢失数据
  • Con :介绍多种技术(加强可维护性)

2。 Rails + Socket.io:使Rails成为一个Socket.io客户端,因为这个repo似乎做了:https://github.com/lyondhill/socket.io-ruby-client

Rails + Socket.io

  • 专业:直截了当
  • Con :依赖不受欢迎的图书馆

3。 Ruby Faye:http://faye.jcoglan.com/ruby.html

  • 专业:100%Ruby
  • Con :由于需要外部应用程序,Socket.io现在比Faye更符合行业标准。

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

  • Pro :应用方式的Rails
  • Con :太不成熟

问题:

  • 现在有没有一种标准方式(我已经错过了)?
  • 对我的比较有任何想法(希望这不会被关闭)?

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:0)

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

虽然它也可以作为一个独立的框架使用,但它很容易设置为Rails附加组件或用Redis替换socket.io。

如果您将服务器切换到Plezi的首选服务器(只需删除对其他服务器的引用),您可以编写一个Plezi websocket控制器并在同一进程(同一个ip:端口)上与您的Rails应用程序一起运行来自你的gemfile)。

另一种方法是将Plezi作为一个独立的进程运行(在不同的端口上)并使用Redis同步它们(使用Plezi的安慰剂API)。

Plezi的文档中有一节标题为:" Using Plezi with our existing Rack application"

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

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

祝你好运!