Php AJAX长轮询,提高效率

Php AJAX长轮询,提高效率,php,Php,一段时间以来,我一直在考虑为我的通知系统进行长时间轮询的想法,但我从来没有想到一种方法来提高后端的效率 我见过的大多数实现都保持连接打开,php每隔几秒钟就查询数据库服务器以查看是否添加了新数据。这对我来说并不比让javascript重复轮询服务器好多少 在任何一种情况下,我的数据库服务器都会受到数万次的攻击,这是可以理解的,这并不是特别需要的 是否有任何系统可以向正在执行/休眠的长轮询脚本发出新数据的“警报”?单个系统 如果您的应用程序是唯一更改数据库的系统,那么您只能在应用程序执行更改时触发

一段时间以来,我一直在考虑为我的通知系统进行长时间轮询的想法,但我从来没有想到一种方法来提高后端的效率

我见过的大多数实现都保持连接打开,php每隔几秒钟就查询数据库服务器以查看是否添加了新数据。这对我来说并不比让javascript重复轮询服务器好多少

在任何一种情况下,我的数据库服务器都会受到数万次的攻击,这是可以理解的,这并不是特别需要的


是否有任何系统可以向正在执行/休眠的长轮询脚本发出新数据的“警报”?

单个系统

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

多系统

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

  • 使用数据库触发器
或者,如果你不想这样做(我通常避免),你可以

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

  • 您至少可以通过只有一个循环来进行优化,该循环频繁地查询数据库,并一次通知所有侦听器(因此,您没有针对每个侦听器的循环)

我希望数据库通知这样的系统能够工作(web应用程序中的ajax长轮询)。我还不清楚这是怎么运作的。当前循环服务器当前检查数据库中的新条目,然后检查并刷新是否存在新数据。我不确定数据库事件如何到达休眠进程,除非它再次轮询后端。也许我这样做是最有效的?查尔斯:是的,这可能是PHP中的一个小问题!我想,这个帖子包含了一些答案: