Ruby on rails 4 选择Faye或Rails 4 Actioncontroller::Live的困惑

Ruby on rails 4 选择Faye或Rails 4 Actioncontroller::Live的困惑,ruby-on-rails-4,websocket,real-time,faye,Ruby On Rails 4,Websocket,Real Time,Faye,我已经将Faye与Ruby On Rails一起使用,对我来说几乎是零成本,因为我正在连接到Rails应用程序的另一台服务器上运行Faye 然而,我遇到了一些问题,比如当一个查询在Rails服务器上花费的时间太长时,Faye连接会在一段时间后失败并引发异常 现在我正在研究Actioncontroller::Live,大多数实现都使用Redis,这对我的初创公司来说有点贵,但是我意识到我不能用Actioncontroller::Live做订阅/发布风格的事情 我的问题:我应该转向Actioncon

我已经将Faye与Ruby On Rails一起使用,对我来说几乎是零成本,因为我正在连接到Rails应用程序的另一台服务器上运行Faye

然而,我遇到了一些问题,比如当一个查询在Rails服务器上花费的时间太长时,Faye连接会在一段时间后失败并引发异常

现在我正在研究Actioncontroller::Live,大多数实现都使用Redis,这对我的初创公司来说有点贵,但是我意识到我不能用Actioncontroller::Live做订阅/发布风格的事情

我的问题:我应该转向Actioncontroller::Live还是继续关注Faye?这些是我想要完成的事情:

  • 评论/提要后的更新
  • 通知系统,基于发布/订阅,类似于Faye
  • 异常处理
  • 可扩展性>更多用户更多连接
  • 我知道Faye使用Bayeux vs ActionController::live使用SSE/HTTP。 我应该考虑和Socket.IO有关的事情吗?袜子

    我已经在这里通读了一些关于这个主题的问题,比如:
    但是我需要更多的信息:

    这里有一些关于我为什么会坚持和费伊在一起的注释,这可能会让你更接近这个问题的答案:

    浏览器兼容性

    正如您在相关stackoverflow问题中所读到的,Faye具有更好的浏览器兼容性

    稳定性

    Rails::Live功能似乎还不是很稳定。Rails SSE目前正在积极开发中。举个例子,你不太可能不受影响

    线程和阻塞与异步非阻塞

    在应用程序中是否使用多线程?如果您不这样做,我肯定不会仅仅为Rails::Live介绍它,因为它可能会带来非线程安全的gem问题和服务器选择的限制

    如果您确实有多线程,那么每个客户端都会为您的应用程序保留一个线程。如果线程用完,应用程序将无响应/死机。考虑需要多少线程来迎合高峰时间,用户拥有多个浏览器选项卡打开,甚至DoS攻击,其中有人打开了大量闲置的SSE / WebSub连接,以达到您的最大值,并使您的应用程序下降。如果您设置了大量max threads以支持许多空闲连接,那么您就有可能拥有那么多非空闲线程,而这些线程本身可能存在问题。没有SSE/websockets和comet/long轮询对于阻止应用程序更安全。据我所知,你的设置分别运行Faye。Faye服务器运行Ruby EventMachine或Node.js,它们都是异步非阻塞的,并且不为每个打开的连接使用线程。它可以毫无问题地处理大量并发连接

    我的观点是,一个普通的阻塞Rails web应用程序和一个单独的异步非阻塞服务器,用于保持打开的连接(传递消息并使应用程序处于活动状态),这两种设置都是最好的。这就是Rails+Faye的功能

    更新:在2015年Railsconf上宣布。如上所述,它运行无阻塞,但它是一个集成的官方Rails解决方案。Rails的一大优势在于,它有一个单一的框架和一个庞大的社区,一个集成的WebSocket非阻塞连接处理程序,您可以在一切都“开箱即用”的情况下单独运行和配置

    来自Action Cable自述文件: 动作电缆由EventMachine和线程的组合供电。连接处理所需的框架管道是在EventMachine循环中处理的,但实际的通道(用户指定的)工作是在普通的Ruby线程中处理的。这意味着您可以毫无问题地使用所有常规Rails模型,只要您没有犯任何线程安全错误


    要了解更多信息,请阅读。

    非常感谢您在回答问题时发出的自信之声。我也决定走那条路。我意识到,如果我选择另一种方式,而不是Faye+Rails的话,那么会带来额外的风险和停机时间问题。再次感谢:),不久我打算写一篇关于这一点的博客,并用你的答案作为证据:)!你写博客了吗?有链接的机会吗?我同意最后一段。尽管Node.js大肆宣传,Rails仍然是首选。