0

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

4

1 回答 1

0

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

原因如下:

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

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

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

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

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

于 2012-06-17T19:28:18.843 回答