我正在第一次尝试长时间轮询。

在PHP脚本中,我有一个带有睡眠计时器的while循环,它将计时器冻结10秒钟,然后再次在数据库中查找新内容。

我在考虑性能和服务器/数据库负载/连接:

对于服务器来说,更糟的是:许多GET请求(ajax),还是许多DB连接的打开/关闭?

使用长轮询但在while循环的每一轮中关闭并重新打开DB连接(释放有限数量的连接),以任何方式会更好吗?

最佳答案

这听起来并不那么琐碎:从简单的“是否应该”替代方案开始,随着扩展到更多服务器,复杂性迅速增加。

两种方法都碰壁了,我们提出了一个代理方案,即使在廉价的共享主机上,它似乎也能很好地工作:


运行一个简单的代理脚本实例,该实例将轮询数据库(在共享主机上,我们从cron作业启动此实例,如果没有其他实例在运行,则仅启动一个实例,因此我们很容易在重新启动过程中幸免)
使该代理脚本将昂贵的数据库轮询转换为便宜的轮询:文件系统中的SysV SHM和标志文件都可以正常工作。代理应保持其单个数据库连接打开
让您的许多长轮询者检查代理标志。


当并发轮询增加时,这可以实现较短的服务器端轮询间隔,而不会出现问题。

关于php - 长轮询PHP。是否保持数据库连接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16871852/

10-13 00:41