gpt4 book ai didi

ruby-on-rails-4 - 选择 Faye 还是 Rails 4 Actioncontroller::Live 的困惑

转载 作者:行者123 更新时间:2023-12-02 23:54:22 26 4
gpt4 key购买 nike

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

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

现在我正在研究 Actioncontroller::Live ,大多数实现都使用 Redis,这对于我的启动来说有点昂贵,但是我意识到我无法使用 Actioncontroller 进行订阅/发布样式的操作::直播。

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

  1. 评论/提要后的更新
  2. 通知系统,基于 pub/sub,类似于 Faye。
  3. 异常处理
  4. 可扩展性 > 更多用户更多连接

我知道 Faye 使用 Bayeux 而 ActionController::live 使用 SSE/HTTP。我应该考虑与 Socket.IO 相关的任何事情吗? SockJS?

我已经阅读了这里有关此主题的一些问题,例如: Replace Faye with rails 4 server side events? Faye VS rails 4 streaming?但我需要更多信息:

最佳答案

以下是关于我为什么坚持使用 Faye 的一些注释,这可能会让您更接近这个问题的答案:

浏览器兼容性

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

稳定性

Rails::Live 功能似乎还不是很稳定。 Rails SSE 目前正在积极开发。例如,您不太可能不受 this issue 的影响。 .

线程和阻塞与异步非阻塞

您在应用程序中使用多线程吗?如果您不这样做,我绝对不会只为 Rails::Live 引入它,因为它可能会导致非线程安全 gem 问题和服务器选择的限制。

如果您确实有多线程,每个客户端都会为您的应用程序保持一个打开的线程。如果您用完线程,您的应用程序将无响应/死亡。考虑一下您需要多少线程来满足用户打开多个浏览器选项卡的高峰时间,甚至是 DOS 攻击(有人打开大量空闲 SSE/websocket 连接以达到最大连接数并导致应用程序瘫痪)。如果您设置大量的最大线程来支持许多空闲连接,则可能会出现许多非空闲线程,而这些线程可能会出现自己的问题。没有 SSE/websockets 和没有 cometd /长轮询对于阻止应用程序来说要安全得多。据我了解,您的设置单独运行 Faye。 Faye 服务器运行 Ruby EventMachine 或 Node.js,它们都是异步非阻塞的,并且不会为每个打开的连接使用线程。它可以毫无问题地处理大量并发连接。

我的观点是,一个普通的阻塞 Rails Web 应用程序,带有一个单独的异步非阻塞服务器,用于保持打开的连接(传递消息并使应用程序运行)是两种设置中最好的。这就是 Rails + Faye 所拥有的。

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

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

要了解更多信息,您可以阅读 ActionCable & Underlying architecture .

关于ruby-on-rails-4 - 选择 Faye 还是 Rails 4 Actioncontroller::Live 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22158421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com