Подскажите пожалуйста, как произвести проверку на отключение клиента от WebSocket сервера. Есть вот такой код:
PHP:
скопировать код в буфер обмена
function startWebsocketServer() { if (!$socket) { die("$errstr ($errno)\n"); } while (true) { //формируем массив прослушиваемых сокетов: $read = $connects; $read []= $socket; $write = $except = null; {//ожидаем сокеты доступные для чтения (без таймаута) break; } { //есть новое соединение //принимаем новое соединение и производим рукопожатие: { $connects[] = $connect;//добавляем его в список необходимых для обработки onOpen($connect, $info);//вызываем пользовательский сценарий } } foreach($read as $connect) {//обрабатываем все соединения $data = fread($connect, 100000 ); if (!$data) { //соединение было закрыто onClose($connect);//вызываем пользовательский сценарий continue; } /* * onMessage($connects, $data) для отправки каждому пользователю своего сообщения * заменить $connects на $connect и убрать цикл в функции onMessage */ onMessage($connects, $data);//вызываем пользовательский сценарий, для отправки одном } } }
Он рабочий, но есть одна проблема, если клиент отключается некорректно - т.е. например прервалось соединение с интернетом, то скрипт через некоторый промежуток времени начинает жутко тормозить, до того момента пока тот же самый клиент вновь не наладит связь с сервером! Как сюда внедрить проверку на то, что клиент отключился без посылки команды на отключение? Если закрыть вкладку браузера, то отключение клиента проходит корректно и проблема отсутствует!
|