Ruby on rails Rails应用程序中的长轮询
我有一个应用程序,它有一个页面,用户必须相对实时地看到这两个步骤是如何处理的 现在这是通过ajax短轮询完成的。我想把它改成一些服务器负担较轻的技术,我在Faye gem和ajax长轮询之间进行选择Ruby on rails Rails应用程序中的长轮询,ruby-on-rails,websocket,passenger,long-polling,faye,Ruby On Rails,Websocket,Passenger,Long Polling,Faye,我有一个应用程序,它有一个页面,用户必须相对实时地看到这两个步骤是如何处理的 现在这是通过ajax短轮询完成的。我想把它改成一些服务器负担较轻的技术,我在Faye gem和ajax长轮询之间进行选择 Ajax长轮询更易于实现,不需要任何服务器入侵。需要4个ajax请求(页面将在完成2个步骤后得到通知)。 Faye gem将接受发送的3个请求,这不会少很多。而且它需要我设置我的nginx乘客服务器,一般来说更难实现和支持 我会选择ajax长轮询,但我听说在长轮询请求时需要运行整个Rails实例,这
Ajax长轮询更易于实现,不需要任何服务器入侵。需要4个ajax请求(页面将在完成2个步骤后得到通知)。
Faye gem将接受发送的3个请求,这不会少很多。而且它需要我设置我的nginx乘客服务器,一般来说更难实现和支持 我会选择ajax长轮询,但我听说在长轮询请求时需要运行整个Rails实例,这会耗尽我的RAM。
另一方面,从这一点上,我了解到Rails可能没有长轮询的问题。那么,什么是真的呢,-来自多个客户端的ajax长轮询是否需要许多并发应用程序处理(这可能会过度分配我的一些资源,不确定是哪种)?您的问题提出了三种不同技术的可能性:
- websocket(,或您喜欢的任何websocket解决方案)
- 短轮询(基于客户端的“拉”式通知)
- 长轮询(客户端和服务器尝试持久连接-websockets之前的技术)
推送
/更新
部分的资源:
- 短轮询:如果每个客户端每2秒发送一次更新查询(不快,但也不太慢,取决于您的需要),那么您只需要每秒处理2500个请求来回答更新查询请求。每个请求都会影响应用程序的内存、性能和响应能力
- 长轮询:您将有5000个连接被阻止并等待响应。这是5000个任务,每个任务可能会占用一个线程。。。即使您使用一些异步响应和线程池(这对于机架式服务器来说是非常困难的)来循环任务,您也会在等待更新时耗尽CPU和内存。此外,每次更新都需要您续订5000个连接(或者,如果幸运的话,HTTP/1.1的
功能将使您免受此不便)。这些被阻止的连接将影响应用程序的响应能力和性能,使用CPU周期并关注真实请求。这可能(也可能不是)比每秒回答2500个请求要好。。。但不是很有效。推送数据是即时的保持活动状态
- Websockets:您将有5000个连接添加到服务器的连接中。只要有任何活动(可能永远不会发生)并且没有线程被阻止,就会调用websocket回调。使用websocket连接发送的更新不会导致连接关闭,因此无需在每次更新时更新连接。推送数据是即时的
正如@myst建议的那样,websockets是您向用户视图添加实时更改的最佳选择。只需在您的答案中添加一点内容也必须尝试一下,或者可能是“短轮询模拟持久化…”---我想您指的是长轮询?@lakesare-对。看来我把长投票和短投票混在一起了。。。我会修好的。谢谢