PHP+AJAX 与 MySQL - 每 2 秒查询一次,TIME_WAIT 过多

PHP+AJAX 与 MySQL - 每 2 秒查询一次,TIME_WAIT 过多

我有一个基本的 HTML 文件,使用 jQuery 的 ajax,每 2 秒连接到我的 polling.php 脚本一次。

polling.php 只是连接到 mysql,检查是否有比我隐藏的、存储的当前 ID 更新的 ID,然后回显是否有新内容。由于 javascript 每 2 秒连接一次,因此我获得了数千个处于 TIME_WAIT 状态的连接,仅对于我的客户端而言。这是因为我的脚本一遍又一遍地重新连接到 MySQL。我尝试过 mysql_pconnect,但没有任何帮助。

有什么方法可以让 PHP 打开 1 个连接,并继续使用它进行查询?而不是每次都重新连接并建立所有这些 TIME_WAIT 连接。不确定在这里该怎么做才能使其正常工作。

答案1

不,这是不可能的。php 无法只打开一个连接,因为对 HTTP 服务器的每个请求都会传递给工作进程,然后工作进程会执行 php 脚本(并创建新连接)。

如果您的 MySQL 和 HTTP 服务器在同一台服务器上运行,则可以使用 unix 套接字连接而不是 TCP 连接。

您可以调整net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait内核参数,以减少状态下的连接数TIME_WAIT

答案2

您可以通过 unix 域套接字连接到 MySQL,因为 PHP 服务器和 MySQL 服务器位于同一台服务器上。以下是一些有关如何切换到域套接字的提示:

MacPorts、MySQL、PHP5 和那个套接字……

如果您有单独的服务器,您可能需要了解有关连接池的更多信息。最简单的入门方法似乎是使用mysql_pconnect而不是mysql_connect。(p 代表持久性)

相关内容