Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails的实时性_Ruby On Rails_Passenger_Real Time - Fatal编程技术网

Ruby on rails Rails的实时性

Ruby on rails Rails的实时性,ruby-on-rails,passenger,real-time,Ruby On Rails,Passenger,Real Time,我正在寻找一种在Rails应用程序(Phusion乘客服务器)上为我的用户实现实时提要的好方法。每个提要可以根据用户的不同而不同,我希望每20-60秒有一个新的条目。对我来说,定期的ajax请求看起来不是最好的方式 我听说了Comet,我想做这样的事情: -使用XMLHttpRequest长轮询等待来自服务器的ping -服务器发送ping请求后,使用ajax更新最新的项目 -启动另一个XMLHttpRequest 这有什么问题吗?有没有更简单更好的方法 谢谢, 就web应用程序(以及Rails

我正在寻找一种在Rails应用程序(Phusion乘客服务器)上为我的用户实现实时提要的好方法。每个提要可以根据用户的不同而不同,我希望每20-60秒有一个新的条目。对我来说,定期的ajax请求看起来不是最好的方式

我听说了Comet,我想做这样的事情: -使用XMLHttpRequest长轮询等待来自服务器的ping -服务器发送ping请求后,使用ajax更新最新的项目 -启动另一个XMLHttpRequest

这有什么问题吗?有没有更简单更好的方法

谢谢,
就web应用程序(以及Rails应用程序)而言,实时只是一种幻觉。长轮询是一个非常接近的近似值。不幸的是,它不太适合Rails。乘客更是如此

长轮询要求每个用户都有一个持久的开放连接,这在没有设计来处理它的服务器(如Apache)上的扩展性不强。不幸的是,有很多服务器是为长轮询可伸缩性而设计的,它们可以很好地与Rails配合使用。您可以尝试服务器,但对于您的标准请求,我真的不知道它的性能与Passenger相比如何

我个人对长期投票的看法是,这是一个需要解决问题的解决方案

实际上,你应该问自己以下问题:

  • 这些更新的优先级是否足够高,以至于不能等待40秒?
  • 如果没有立即收到更新,会发生什么情况?
  • 我的用户是否会如此专注于我的应用程序,以至于等待15秒会对他们的体验产生负面影响?
  • 在正常使用情况下,我的应用程序吸引用户注意力的百分比是多少?
  • 响应更新需要多长时间?
  • 它真的需要实时吗?
这些问题中有几个是以不同的方式问其他问题,但这对于这些主观问题来说是必要的

我想你明白我的意思了:实时更新很好,但从来没有真正的必要。如果你正在做一件事情,如果对实时更新没有做出反应,后果就是世界末日。您真的不应该将其开发为web应用程序

如果你还想着实时更新,你可以去看看。但这是一个基于Flash的解决方案。

Friendfeed在Python中构建了一个开源的解决方案

在开始使用之前,我们研究了一些设置起来相当复杂的XMPP选项。长寿命的HTTP GET请求连接到这个,rails应用程序将请求推回到nginx。Nginx还将动态请求代理给一个混血儿集群。我们运行了一些jQuery,打开连接,然后在服务器收到消息或出现错误时将其重新打开到服务器。通过这种方式,我们能够实现Comet风格的近实时更新


这将帮助您开始(必须编译nginx)。我们现在正在开发中,并计划在生产中使用它,除非证明它本身不可靠,到目前为止还不错。

我不理解您的问题。你是否正在尝试实现一个用户活动提要(比如facebook)?它更像是friendfeed。在很多情况下,长时间轮询是有意义的。假设您正在等待异步后台进程完成。如果用户正在“等待”这种情况发生,则需要长时间轮询或快速XHR请求。