【问题标题】:Server-side Push in RailsRails 中的服务器端推送
【发布时间】:2010-10-01 04:58:42
【问题描述】:

我想使用 AJAX 在 Rails 中实现一个可扩展的聊天室。我从研究中知道,唯一的可扩展性发生在服务器端推送。

我的两个问题是:

1) 在一个相当高效的聊天服务器中,轮询在什么时候变得令人望而却步? 2)我真的不想用剑圣。我不太了解彗星的工作原理。我想我想知道使用 Javascript(创建客户端服务器/轮询器)和另一种语言(为防火墙后面的客户端提供有效的轮询,以及与 CGI 的集成)构建这对我来说是否非常困难。 和 3)(是的,在 2 中),我是否以正确的方式进行?

我希望得到的最简单的答案是量化的“是的,您将 5 行 Javascript 放入客户端,将 20 行 ruby​​ 放入 CGI 脚本中,然后就这样结束了”。

【问题讨论】:

    标签: ruby-on-rails ajax chat


    【解决方案1】:

    我现在正在尝试做同样的事情。 Juggernaut 运行良好,但不适用于 Rails 3,如果这不是必需的,那么我建议使用它,因为聊天非常容易。 我的项目使用 Rails 3,每 3 秒轮询一次服务器(Campfire 也有 3 秒)。我正在使用 Rails Metal 使轮询速度超快。如果你想用剑圣,那就太好了,2行客户端js,1或2行服务器端。否则,开始工作!

    【讨论】:

      【解决方案2】:

      如果做起来这么容易,人们就不会开发这些技术。恕我直言,我认为民意调查始终是一种笨拙的方式。那就是……

      我不知道为什么 Juggernaut 不受欢迎 一个人用它建立了这个网站 64Squares 并且效果很好。

      我知道其他网站,例如WeeWar 使用轮询方法,他们有向上或 400 次请求。所以我认为缩放成为一个问题需要一段时间。

      祝你好运

      干杯

      【讨论】:

      • 嗯...所以他们每秒轮询超过 4 次,并且可以缩放吗?嗯,那也许我应该考虑一下,或者至少将它用作主宰的备份。我想击中 95% 的计算机并赶上其余的应该是“好的”
      【解决方案3】:

      是的,您将 5 行 Javascript 代码放入客户端,将 20 行 ruby​​ 代码放入 CGI 脚本,就这样结束了

      【讨论】:

      • 我知道,在这一点上,幽默的答案并不被重视和欣赏,但我无法抗拒。
      • 我会笑的,只是我整个下午都在祈祷这个问题的答案。我正在构建它来帮助朋友的小型企业,并且由于无法让 Flash 在我的浏览器上运行,因此我希望尽可能避免依赖技术。
      • 对不起。我制作俏皮话的一个重要原因是因为我没有任何有用的提示。祝你好运。
      【解决方案4】:

      COMET 通过在 Javascript 中保持与服务器的连接保持打开状态来工作(在 COMET 网站上有很多关于如何获取此异步数据的示例)。服务器基本上将数据写出并刷新,这可以在紧密循环中使用互斥锁来完成。您可能还需要一个消息队列。

      从长远来看,了解BOSH 可能会更好。这是 COMET 的自然进展。

      虽然剑圣有一个学习曲线(或者可能不是真的),但学习如何做 COMET 是一个更陡峭的曲线。即使只是异步推送也更难。不仅如此,你还需要考虑如何让它很好地扩展。我从未使用过 Juggernaut,但就 ROR 插件而言,我认为它是微不足道的。如果他们想出如何让它更好地扩展,您就可以免费获得更快的性能。

      轮询是另一个在技术上应该可行的选项更简单,但是,我热衷于不使用轮询,因为它会杀死你的服务器 - 所以我不会在这里详细说明,因为我觉得轮询是惰性路由。

      【讨论】:

        【解决方案5】:

        营火呢?它每 5 秒轮询一次服务器。像梦一样工作。

        【讨论】:

        • 我有点希望 IRC 级别的响应能力,当它们出现时,每秒会传输多条消息。
        猜你喜欢
        • 1970-01-01
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-05
        • 1970-01-01
        相关资源
        最近更新 更多