У меня есть базовый файл 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
штат.