就 Web 应用程序(以及扩展的 Rails 应用程序)而言,实时只是一种幻觉。长轮询是一个非常接近的近似值。不幸的是,它不太适合 Rails。乘客更是如此。
长轮询需要为每个用户提供一个持久的打开连接,这在不是为处理它而设计的服务器(例如 Apache)上不能很好地扩展。不幸的是,确实有很多为长轮询可扩展性而设计的服务器与 Rails 配合得很好。您可以尝试使用Shooting-Star服务器,但对于您的标准请求,我真的不知道它的性能与Passenger 相比如何。
我个人对长轮询的看法是它是一个需要问题的解决方案。
真的,您应该问自己以下问题:
- 这些更新是否具有足够高的优先级以至于它们不能等待 40 秒?
- 如果没有立即收到更新会怎样?
- 我的用户是否会如此专注于我的应用程序,以至于等待 15 秒会对他们的体验产生负面影响?
- 在正常使用情况下,我的应用程序吸引了多少百分比的用户注意力?
- 响应更新需要多长时间?
- 它真的需要实时吗?
其中一些问题以不同的方式提出其他问题,但对于此类主观问题来说,这是必要的。
我想你明白我的意思:实时更新非常好,但从来没有必要。如果您正在做的事情是无法对实时更新做出反应的后果就是世界末日。你真的不应该把它开发成一个 Web 应用程序。
如果您仍然对实时更新有所了解,可以查看Juggernaut。但这是一个基于 Flash 的解决方案。