@antobra

Php socket create ошибка соединения при множество запросов, как победить?

Приветствую. Подскажите, с чем может быть связана ошибка отсутствия соединения у клиента с сокетом при множестве запросов через socket_create? То есть например при цикле 5к запросов проходит за несколько секунд, а после «бац» и ошибка соединения.
Технически вопрос я решил, добавив после socket_close usleep(3000), но это же ненормальная история. Это увеличивает время выполнения скрипта, ну и выглядит костылем очевидно. Существуют ли варианты как избежать ошибку?
Пс: проверил, что каждое соединение заканчивается socket_close и соединение не подвисает. То есть будто сервер не успевает где-то внутри закрыть предыдущее соединение, как к нему стучится новое. Именно по этой причине usleep помогает сокету «охладиться». Не знаю, несколько дней ломаю голову. Код сервер-клиент беру с php.net. Настройка SO_REUSEADDR присутствует (соединение с 127.0.0.1).
Посоветуйте, что можно посмотреть, на что обратить внимание?
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
@Vitsliputsli
Смотрите логи ошибки соединения.
Проверьте кол-во одновременных соединений, если примерно в районе 1000, то вы скорее всего наткнулись на лимит файловых дескрипторов.
Дело в том, что php создает для каждого коннекта файл, лимит кол-ва файловых дескрипторов на один процесс по-умолчанию, чтото вроде 1024. Насколько помню, это лимит ОС и лимит php. Поэтому нужно увеличить лимит в Linux, и придется пересобрать php с большим кол-вом.
Либо использовать любой другой язык, без подобных заморочек. Во всяком случае, на python и go, подобных проблем нет, они не используют файловые дескрипторы для каждого соединения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽