php - 长轮询 PHP。是否保持数据库连接?

标签 php mysql apache long-polling polling

我是第一次尝试长轮询。

在 PHP 脚本中,我有一个带有 sleep 计时器的 while 循环,该循环将脚本卡住 10 秒,然后再次在数据库中查找新内容。

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

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

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

最佳答案

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

在这两种方法都遇到困难后,我们提出了一个代理方案,即使在廉价的共享托管上似乎也能很好地工作:

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

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

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

相关文章:

apache - .htaccess代码阻止了我网站的所有访问量,怎么了?

PHP 还是 Apache?显示 zip 文件的内容而不是下载 zip 文件

php - 无法从mysql查询获取数据到 Controller

php - 数据透视表 Laravel 4

php - 调用非对象上的成员函数bind_param()——在准备之前返回

mysql - 在不提及列名的情况下查找具有空列的行

MySql Concat First, Middle 和 Last

java - Apache POI : Retrieve page number from XWPFParagraph instance?

php - magento 中的 reindexall() 与 reindexeverything() 有什么区别?

mysql - 使用 SQL 分配资源(行)