ruby-on-rails – 在Rails应用程序中进行长轮询
我的应用程序有一个页面,用户必须在该页面上相对实时地查看如何处理2个步骤.
现在这是通过ajax短轮询完成的.我想把它改成一些服务器重量较少的技术,我选择Faye gem和ajax long-polling. 我会选择ajax长轮询,但我听说它需要一个完整的Rails实例运行,而请求是长轮询的,这将耗尽我的RAM. 解决方法
你的问题提出了三种不同技术的可能性:
> Websockets(Faye,Plezi,EM-Websockets或您喜欢的任何websocket解决方案). 虽然Websockets似乎是推送通知最具扩展性和自然性的解决方案,但它 – 大多数情况下 – 都是一个特定于应用程序的问题.您需要考虑您的资源和需求,并以最佳方式平衡它们. Websockets与Short-polling各自带有“价格”.虽然短轮询更容易实现,但Websockets允许真正的“推送”,其设计旨在节省Web和服务器资源. 至于Websockets与Long轮询,答案很简单 – Websockets将更有效. 长轮询通过阻止浏览器发送的HTTP请求来模拟持久连接,直到服务器有数据“回答”为止.这可能会阻止整个服务器,如果它的并发性无效,它显然会阻止负责回答请求的线程(服务器的线程池中有多少线程?8?24?). 相反,Websockets是持久连接,不会阻塞,而是与服务器集成.这是一个更加优雅和资源友好的解决方案. 您可以在此处找到有关长轮询与短轮询的更多信息: > Short-polling vs Long-polling for real time web applications? 例如: 假设您期望在任何特定时刻连接到您的网站的5,000个活跃客户端(如果每个客户端每天花费30分钟连接,则假定总共约240K客户端,忽略峰值和退潮是使用时间). 现在,让我们比较应用程序的推送/更新部分的资源: >短轮询:如果每个客户端每2秒发送一次更新查询(不是很快,但不是太慢,具体取决于您的需要),您需要处理2,500个请求/秒才能回答更新查询请求.每个请求都会影响应用的内存,性能和响应能力. 总结: 按照设计,如果您有自己的服务器,那么您应该能够使用Websockets服务更多客户端,而不是使用Short或Long轮询. 然而: > Websockets(以及长轮询)比短轮询更难编码(它们使用非常有价值的资源,这是人类编码时间);>一些托管服务(即Heroku)将限制websocket客户端数量,使“数学”不太确定……另一方面,这些相同服务的并发限制(req / sec)可能最终有利于websockets. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |