0

我第一次尝试长轮询。

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

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

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

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

4

1 回答 1

0

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

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

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

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

于 2013-06-01T10:59:02.413 回答