AJAX长轮询,提高效率

问题描述:

有一段时间我一直在玩我的通知系统的长轮询的想法,但我从来没有想过一种方法,使其更有效的后端。AJAX长轮询,提高效率

我看到的大多数实现都保持连接打开状态,并且php每隔几秒查询一次数据库服务器以查看是否有新的数据已被创建。这让我觉得没有比使用JavaScript重复轮询服务器更好的方法。

在任何一种情况下,我的数据库服务器都被击中数千次,这是不可取的。

是否有任何可以将执行/休眠长轮询脚本“提醒”新系统的系统?

单系统

如果你的应用是改变数据库,那么你可以触发你的听众,只有当你的应用程序进行修改(最好只更改到是每个听众感兴趣的实体的唯一系统)。

多个系统

在多个系统访问的情况下/更改了数据库,您可以

  • 与数据库的工作触发

,或者如果你不想要做到这一点(我通常避免它),你可以

  • 确保所有其他系统访问数据库将始终通知应用程序(通过某些消息机制)

,或者如果这是不可能的

  • 你可以只有一个回路至少优化该经常查询数据库,并且一次通知所有的监听器(所以你没有为每个监听器设置一个循环)。
+0

我很喜欢系统,如数据库通知工作(ajax在Web应用程序中长时间轮询)。对于这种运作方式,我还是有点朦胧。 当前循环,服务器当前检查数据库中的新条目,然后检查并刷新是否存在新数据。我不确定数据库事件如何到达睡眠进程,除非它再次轮询后端。 也许我这样做**的方式**是最有效率的? – 2010-08-03 08:39:51

+0

@Charles:是的,这可能是PHP中的一个小问题!我认为,这个线程包含一些答案:http://*.com/questions/603201/using-comet-with-php – 2010-08-03 10:33:44