AJAX长轮询,提高效率

Cha*_*is 6 php

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

我见过的大多数实现都保持连接打开,并且php每隔几秒查询数据库服务器以查看是否已经添加了新数据.这让我感到震惊,因为javascript重复轮询服务器.

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

是否有任何系统可以"警告"执行/休眠长轮询脚本到新数据?

Chr*_*her 2

单一系统

如果您的应用程序是唯一更改数据库的系统,那么您只能在应用程序执行更改时触发侦听器(理想情况下仅针对每个侦听器感兴趣的实体的更改)。

多系统

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

  • 使用数据库触发器

或者如果你不想这样做(我通常会避免这样做),你可以

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

或者如果那不可能

  • 您至少可以通过仅使用一个频繁查询数据库的循环进行优化,并立即通知所有侦听器(因此您不必为每个侦听器都有一个循环)。