我的网站差不多完成了,但我遇到了问题。每10-> 15秒,我的网站将搜索数据库以检查是否有更新。如果有更新,则向在线用户发送通知。 我搜索谷歌并找到了两个解决方案:Comet和AJAX。在我的情况下哪个更好。还是有更好的解决方案?
答案 0 :(得分:0)
在我看来,对于共享托管并使用Apache和PHP的网站的最佳解决方案是使用realtime hosted service将更新推送到已连接的客户端。
原因如下:
Apache不是为处理长时间运行的持久连接而构建的,因此它不是Comet或WebSocket解决方案的绝佳选择。您将找到的PHP Comet和WebSocket解决方案可能作为守护进程独立运行,而不是在Apache上运行。在共享托管上,您很可能无法运行守护程序进程,并且您的托管服务提供商也不太可能对您保持许多持久连接打开并占用共享计算机上的资源感到满意。
如果您使用AJAX轮询解决方案并每隔10到15秒轮询您的网站,并在该轮询中包含数据库查询,那么如果您的网站上有合理数量的客户端,资源使用率可能非常快: / p>
100个客户端,10秒轮询,60秒周期= 100 * 10 * 6 =每分钟6000个请求和数据库查询。如果没有发生更新,很多时候这些请求也可能是浪费。您可以找到更大的示例here。
通过卸载将更新立即推送到您的网站客户端的功能,您可以删除这些6000个请求和数据库查询,并通过一次调用实时托管服务来替换它们。该服务维护与客户端的持久连接,以便当您的应用程序将更新推送到客户端时,它可以将它们传递给连接的客户端。
最后,您应该知道WebSockets取代Comet作为实时通信的首选解决方案。该协议的创建是为了解决Comet解决方案试图用各种黑客解决的问题。有关这些技术和WebSockets历史的更多信息,请参阅here。