Проблема с сокетами Ratchet, React. Сессия открыта — данных нет?
Приветствую. Проблема собственно в следующем: есть небольшой сайт. Используются сокеты. Их задача - отправлять пользователям различного рода информационные сообщения.
Так вот, PHP скомпилирован с fd_setsize=8192. Системные значения выше. Раньше была ошибка, связанная с тем - что не хватало файловых дескрипторов для работы. После компиляция ошибка исчезла - но результат лучше не стал. Пока на сайте менее 1000 пользователей - сокеты работают прекрасно. Как только их количество увеличивается хотя бы раза в полтора (до 1500) - всё, сокеты не получают никаких данных, но и не отваливаются с ошибкой (судя по инспектору в хроме).
Даже не знаю куда копать дальше или по какому ключевому слову гуглить. Буду весьма признателен за помощь.
UPD1: Соединение с сокетом сразу закрывается после подключения, либо отправки данных. Причины пока не ясны и нуждаюсь в подсказках.
посмотреть ограничение кол-ва файлов в ядре: cat /proc/sys/fs/file-nr
посмотреть ограничение накладываемые через PAM: uname -a и соответствующие настройки в /etc/security/limits.conf и убедиться что модуль pam_limits управляющий ими загружен
Заодно можно посмотреть системные логи на сервере, там могут быть подсказки.
Думаю проблема не в ограничении количества файлов. Смотрю что происходит через websocket.org/echo - получается что сразу после connect'a идет disconnect. Хотя timeout выставлен нормальный.
После send'a тоже сразу дисконнект.
Салават Ситдиков: с файлами вроде ок, но не понятно где идёт disconnect tcp, ratchet или клиент.
Проще наверно Ratchet продебажить, может к нему не доходит новый конект, может он видит что памяти не хватает и даже не пытается обработать соединение, может код обработчиков начинает тупить и т.п.
Walt Disney: памяти хватает, из 7.5 - 4 свободны. Память даже не свопится.
Не знаю имеет ли это отношение, но если к сокету по http подключаться - то 400 ошибка nginx возникает.
Walt Disney: в общем проблема оказалась локальной - фаервол не пускал соединения, похоже. Потому что у всех работает - только в нашей рабочей сети - ошибка.