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
, (р для постоянных)