加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在Rails应用程序中进行长轮询

发布时间:2020-12-17 04:02:29 所属栏目:百科 来源:网络整理
导读:我的应用程序有一个页面,用户必须在该页面上相对实时地查看如何处理2个步骤. 现在这是通过ajax短轮询完成的.我想把它改成一些服务器重量较少的技术,我选择Faye gem和ajax long-polling. Ajax长轮询更容易实现,不需要任何服务器入侵.它将需要4个ajax请求(用于
我的应用程序有一个页面,用户必须在该页面上相对实时地查看如何处理2个步骤.

现在这是通过ajax短轮询完成的.我想把它改成一些服务器重量较少的技术,我选择Faye gem和ajax long-polling.
Ajax长轮询更容易实现,不需要任何服务器入侵.它将需要4个ajax请求(用于完成2个步骤的页面).
Faye gem将发送3个请求,这并不是很少.它需要我设置我的nginx-passenger服务器,并且更难以实现和支持.

我会选择ajax长轮询,但我听说它需要一个完整的Rails实例运行,而请求是长轮询的,这将耗尽我的RAM.
另一方面,从这个How rails server on production works?我明白Rails在长轮询中可能没有这个问题.那么,这是真的,– 来自多个客户端的ajax长轮询需要许多并发应用程序处理(这可能会占用我的一些资源,不确定哪些)?

解决方法

你的问题提出了三种不同技术的可能性:

> Websockets(Faye,Plezi,EM-Websockets或您喜欢的任何websocket解决方案).
>短轮询(基于客户端的’拉’式通知).
>长轮询(客户端和服务器尝试持久连接 – 前webockets技术).

虽然Websockets似乎是推送通知最具扩展性和自然性的解决方案,但它 – 大多数情况下 – 都是一个特定于应用程序的问题.您需要考虑您的资源和需求,并以最佳方式平衡它们.

Websockets与Short-polling各自带有“价格”.虽然短轮询更容易实现,但Websockets允许真正的“推送”,其设计旨在节省Web和服务器资源.

至于Websockets与Long轮询,答案很简单 – Websockets将更有效.

长轮询通过阻止浏览器发送的HTTP请求来模拟持久连接,直到服务器有数据“回答”为止.这可能会阻止整个服务器,如果它的并发性无效,它显然会阻止负责回答请求的线程(服务器的线程池中有多少线程?8?24?).

相反,Websockets是持久连接,不会阻塞,而是与服务器集成.这是一个更加优雅和资源友好的解决方案.

您可以在此处找到有关长轮询与短轮询的更多信息:

> Short-polling vs Long-polling for real time web applications?
> Scaling a chat app – short polling vs. long polling (AJAX,PHP)

例如:

假设您期望在任何特定时刻连接到您的网站的5,000个活跃客户端(如果每个客户端每天花费30分钟连接,则假定总共约240K客户端,忽略峰值和退潮是使用时间).

现在,让我们比较应用程序的推送/更新部分的资源:

>短轮询:如果每个客户端每2秒发送一次更新查询(不是很快,但不是太慢,具体取决于您的需要),您需要处理2,500个请求/秒才能回答更新查询请求.每个请求都会影响应用的内存,性能和响应能力.
>长轮询:您将阻止5000个连接并等待响应.那5000个任务可能每个都使用一个线程……即使你设法使用一些异步响应和一个线程池来循环任务(这对于Rack服务器来说非常困难),你会耗费CPU和内存等待更新.此外,每次更新都需要您续订5,000个连接(或者,如果幸运的话,HTTP / 1.1的保持活动功能将为您免除这种不便).这些被阻止的连接将影响应用程序的响应能力和性能,使用CPU周期并从实际请求中获得焦点.它可能(或可能不)比尝试每秒回答2,500个请求更好……但效果不是很好.立即推送数据.
> Websockets:您将有5,000个连接添加到服务器的IO reactor.只要有任何活动(可能永远不会发生)并且没有任何线程被阻止,将调用websocket回调.使用websocket连接发送的更新不会导致连接关闭,因此无需每次更新都更新连接.立即推送数据.

总结:

按照设计,如果您有自己的服务器,那么您应该能够使用Websockets服务更多客户端,而不是使用Short或Long轮询.

然而:

> Websockets(以及长轮询)比短轮询更难编码(它们使用非常有价值的资源,这是人类编码时间);>一些托管服务(即Heroku)将限制websocket客户端数量,使“数学”不太确定……另一方面,这些相同服务的并发限制(req / sec)可能最终有利于websockets.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读