Назад | Перейти на главную страницу

PHP + AJAX с MySQL - запрос каждые 2 секунды, слишком много в TIME_WAIT

У меня есть базовый файл HTML, использующий jQuery ajax, который подключается к моему скрипту polling.php каждые 2 секунды.

Polling.php просто подключается к mysql, проверяет наличие идентификатора более нового, чем мой скрытый, сохраненный текущий идентификатор, а затем выводит эхо, если есть что-то новое. Поскольку javascript подключается каждые 2 секунды, я получаю тысячи подключений в TIME_WAIT только для моего клиента. Это потому, что мой скрипт снова и снова подключается к MySQL. Я пробовал mysql_pconnect, но это не помогло.

Есть ли способ заставить PHP открыть 1 соединение и продолжить его использование? Вместо того, чтобы повторно подключаться каждый раз и делать все эти подключения TIME_WAIT. Не знаю, что здесь делать, чтобы все работало правильно.

Вместо этого вы можете подключиться к MySQL через сокеты домена unix, если сервер PHP и сервер MySQL находятся на одном сервере. Вот несколько советов, как переключиться на доменные сокеты:

MacPorts, MySQL, PHP5 и другие сокеты ...

Если у вас есть отдельные серверы, возможно, вы захотите узнать больше о пуле соединений. Самый упрощенный подход к началу работы, кажется, заключается в использовании mysql_pconnect вместо того mysql_connect. (p для постоянного)

Нет, это невозможно. PHP не может открыть только одно соединение, потому что каждый запрос к HTTP-серверу передается рабочему процессу, который выполняет скрипт php (и создает новое соединение).

Если ваш MySQL и HTTP-сервер работают на одном сервере, вы можете использовать соединение сокета unix вместо соединения TCP.

Вы, colud, настраиваете net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait параметр ядра, чтобы уменьшить количество подключений в TIME_WAIT штат.