【问题标题】:Which is better Comet or AJAX in term of 10->15 second polling? [closed]就 10->15 秒轮询而言,Comet 和 AJAX 哪个更好? [关闭]
【发布时间】:2012-06-17 08:33:52
【问题描述】:

我的网站快完成了,但我遇到了问题。每隔 10->15 秒,我的网站将搜索数据库以检查是否有更新。如果有更新,则向在线的用户发送通知。 我搜索谷歌并找到了两个解决方案:Comet 和 AJAX。在我的情况下哪个更好。还是有更好的解决方案?

【问题讨论】:

  • 我建议您的选择是 1) AJAX 轮询 2) 自托管实时解决方案 (Comet/WebSockets)(但这取决于您的托管 3)卸载到托管实时服务(Comet/WebSockets )。您的托管解决方案是什么?自托管完全“root”访问权限?还是共享主机?由于您使用 PHP 和 Apache,由于需要维护许多持久连接,因此可能无法实现自托管实时解决方案。如果你能澄清我会提出一个解决方案。
  • 我对网络托管了解不多,但它是一种共享托管,他们将其命名为企业托管。我的网站使用 php 和 jquery,因此我认为 Comet 和 ajax 非常适合我,但我阅读了大量的 cmets,他们说用 php 实现 comet 不是一个好的选择,你需要使用 socket.io 或 node.js。你同意他们的观点吗?

标签: php ajax apache comet polling


【解决方案1】:

在我看来,对于共享主机并使用 Apache 和 PHP 的网站,最好的解决方案是使用 realtime hosted service 将更新推送到连接的客户端。

原因如下:

Apache 不是为处理长时间运行的持久连接而构建的,因此它不是 Comet 或 WebSocket 解决方案的最佳选择。您会发现 PHP Comet 和 WebSocket 解决方案可能会作为守护进程独立运行,而不是在 Apache 上运行。在共享主机上,您不太可能运行守护进程,并且您的主机提供商也不太可能对您保持许多持久连接打开并在共享计算机上占用资源感到满意。

如果您使用 AJAX 轮询解决方案并每 10 到 15 秒对您的站点进行轮询,并在该轮询中包含一个数据库查询,那么如果您的站点上有合理数量的客户端,那么资源使用量会很快飙升:

100 个客户端,10 秒轮询,60 秒周期 = 100 * 10 * 6 = 每分钟 6000 个请求和数据库查询。如果没有发生更新,很多时候这些请求也可能是浪费。你可以找到更大的例子here

通过卸载向您的网站客户端即时推送更新的能力,您可以删除这 6000 个请求和数据库查询,并通过一次调用实时托管服务来替换它们。该服务维护与客户端的持久连接,因此当您的应用程序将更新推送给它时,它可以将它们传递给连接的客户端。

最后,您应该知道 WebSockets 取代 Comet 成为实时通信的首选解决方案。该协议旨在解决 Comet 解决方案试图通过各种黑客手段解决的问题。有关这些技术和 WebSockets 历史的更多信息,请参阅here

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 2011-02-27
    • 2012-08-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 2019-09-12
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多