Есть сокет-сервер. Работает хорошо, но как-то не очень стабильно. Проблема в следующем, если скрипт работает более суток, то он перестает нормально писать информацию в сокеты. Сервер служит транспортом для личных сообщений и выполняет еще несколько служебных функций. После запуска работает хорошо и быстро, инфа рассылается по всем открытым сокетам нужных пользователей. Но после того, как пройдет некоторый интервал (около суток) что-то ломается. При этом сервер принимает входящие подключения, регистрирует и отключает пользователей пишет в базу, в общем делает все, кроме отправки сообщения. При этом логе пишет, что информацию такую-то в такой-то сокет отправил. Но клиент её не получает. В логе php ошибок нет. Сервер написан на php клиентская часть работает с использование web сокетов. Пока решением проблемы вижу перезапуск сервера через какой-то интервал. Но это, на мой взгляд, как-то не очень правильно.
PS О том, что писать такие вещи нужно на чём-то другом, я знаю, но пока нет времени учить еще один язык.
Если кто-то сталкивался с такой проблемой, поделитесь пожалуйста.
PHP всё равно имеет утечки памяти, так что перезапускать придётся. Раньше/позже — не так критично, имхо. Думаю, в код можно добавить такие кусочки, которые сделают перезапуск безопасной и штатной операцией.
Однако, это не решение проблемы в Вашем случае. Нужно найти способ определить в скрипте, что сообщение не отправлено в сокет (проверить?), чтобы он сам себя перезапустил.
Та же беда была только на Питоне при рассылке push уведомлений. Использовал send_all, но выяснилось, что при переполнении сетевого буфера поток отправки намертво вис (раньше интернет у сервера периодически пропадал и уведомлений успевало отправиться много). Переделал на send и в select жду готовности на запись. Если таймаут выходит — перезагрузка. Может тут проблема в том же?