我是第一次尝试长轮询。
在 PHP 脚本中,我有一个带有 sleep 计时器的 while 循环,该循环将脚本卡住 10 秒,然后再次在数据库中查找新内容。
我正在考虑性能和服务器/数据库负载/连接:
对于服务器来说,什么更糟糕:很多 GET 请求(ajax),或者很多数据库连接的打开/关闭?
使用长轮询但在每轮 while 循环中关闭并重新打开数据库连接(以释放有限数量的连接)是否会更好?
最佳答案
这并不像听起来那么简单:从一个简单的“我应该或不应该”的替代方案开始,随着扩展到更多服务器,复杂性迅速增加。
在这两种方法都遇到困难后,我们提出了一个代理方案,即使在廉价的共享托管上似乎也能很好地工作:
- 运行一个简单代理脚本的单个实例,该实例会轮询数据库(在共享主机上,我们从 cron 作业启动此脚本,如果没有其他实例正在运行,则仅启动一个实例,因此我们可以轻松地在重新启动后幸存)
- 让代理脚本将昂贵的数据库轮询转换为更便宜的轮询:SysV SHM 和文件系统中的标志文件都可以正常工作。代理应保持其单个数据库连接打开
- 让您潜在的许多长轮询者检查代理标志。
这使得实现较短的服务器端轮询间隔成为可能,而不会在并发轮询增加时遇到问题。
关于php - 长轮询 PHP。是否保持数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16871852/