AJAX长轮询,提高效率

6
有一段时间我一直在考虑使用长轮询来实现我的通知系统,但是我一直没有想到一种使后端更加高效的方法。
我看到的大多数实现都保持连接开启,然后PHP每隔几秒钟就会查询数据库服务器,以查看是否添加了新数据。这对我来说并不比让JavaScript反复轮询服务器更好。
在任何一种情况下,我的数据库服务器都会被访问数万次,这显然是不太理想的。
是否有任何系统可以“警报”正在执行/休眠的长轮询脚本以获取新数据?
1个回答

2

单一系统

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

多个系统

如果有多个系统访问/更改数据库,则可以选择:

  • 使用数据库触发器

或者,如果您不想这样做(我通常避免这样做),则可以:

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

或者,如果不可能实现上述操作,则至少可以通过只有一个循环经常查询数据库并一次性通知所有监听器来进行优化(因此您不需要为每个监听器都设置一个循环)。


我想让像数据库通知这样的系统运行起来(在Web应用程序中使用Ajax长轮询)。我仍然有点模糊,不确定它该如何操作。当前的循环,服务器当前检查数据库中的新条目,然后检查并清除如果有新数据存在。我不确定数据库事件如何到达睡眠进程,除非再次轮询后端。也许我现在所做的方式确实是最有效的? - Charles Harris
@Charles:是的,这可能是PHP中的一个小问题!我认为,这个线程包含了一些答案:https://dev59.com/rXRB5IYBdhLWcg3wgHar - Chris Lercher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接