AJAX长轮询,提高效率
问题描述:
有一段时间我一直在玩我的通知系统的长轮询的想法,但我从来没有想过一种方法,使其更有效的后端。AJAX长轮询,提高效率
我看到的大多数实现都保持连接打开状态,并且php每隔几秒查询一次数据库服务器以查看是否有新的数据已被创建。这让我觉得没有比使用JavaScript重复轮询服务器更好的方法。
在任何一种情况下,我的数据库服务器都被击中数千次,这是不可取的。
是否有任何可以将执行/休眠长轮询脚本“提醒”新系统的系统?
答
单系统
如果你的应用是改变数据库,那么你可以触发你的听众,只有当你的应用程序进行修改(最好只更改到是每个听众感兴趣的实体的唯一系统)。
多个系统
在多个系统访问的情况下/更改了数据库,您可以
- 与数据库的工作触发
,或者如果你不想要做到这一点(我通常避免它),你可以
- 确保所有其他系统访问数据库将始终通知应用程序(通过某些消息机制)
,或者如果这是不可能的
- 你可以只有一个回路至少优化该经常查询数据库,并且一次通知所有的监听器(所以你没有为每个监听器设置一个循环)。
我很喜欢系统,如数据库通知工作(ajax在Web应用程序中长时间轮询)。对于这种运作方式,我还是有点朦胧。 当前循环,服务器当前检查数据库中的新条目,然后检查并刷新是否存在新数据。我不确定数据库事件如何到达睡眠进程,除非它再次轮询后端。 也许我这样做**的方式**是最有效率的? – 2010-08-03 08:39:51
@Charles:是的,这可能是PHP中的一个小问题!我认为,这个线程包含一些答案:http://stackoverflow.com/questions/603201/using-comet-with-php – 2010-08-03 10:33:44