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

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

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

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

2 ответа

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

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

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

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

MacPorts, MySQL, PHP5 и тому подобное...

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

Другие вопросы по тегам