长轮询PHP。保持数据库连接与否?

时间:2013-06-01 10:48:15

标签: php mysql apache long-polling polling

我第一次尝试长时间的民意调查。

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

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

服务器更糟糕的是:许多GET请求(ajax),或许多数据库连接的打开/关闭?

使用长轮询但是在每轮循环中关闭并重新打开数据库连接(以释放有限数量的连接)会不会更好?

1 个答案:

答案 0 :(得分:0)

这听起来不那么微不足道:什么是从一个简单的&#34开始的?我应该不是"通过扩展到更多服务器,替代方案的复杂性迅速增加。

使用这两种方法打击墙,我们已经提出了一个代理方案,即使在便宜的共享托管上似乎也能正常运行:

  • 运行一个简单代理脚本的单个实例,用于轮询数据库(在共享主机上我们从一个cron作业启动它,只启动一个实例,如果没有其他正在运行,那么我们很容易在重新启动后继续存在)
  • 让代理脚本将昂贵的数据库轮询转换为更便宜的民意调查:文件系统中的SysV SHM和旗文件都可以正常工作。代理应保持其单个数据库连接打开
  • 让你的许多长轮询者检查代理标志。

这使得在并发轮询增加时可以实现一个短的服务器端轮询间隔,而不会遇到问题。