Задать вопрос
@antobra

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

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

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

Похожие вопросы