[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Websocket некорректное отключение клиента
arbuzmaster
Подскажите пожалуйста, как произвести проверку на отключение клиента от WebSocket сервера. Есть вот такой код:

function startWebsocketServer()
{

$socket = stream_socket_server("tcp://0.0.0.0:8080", $errno, $errstr);

if (!$socket)
{
die("$errstr ($errno)\n");
}

$connects = array();
while (true)
{
//формируем массив прослушиваемых сокетов:
$read = $connects;
$read []= $socket;
$write = $except = null;

if (!stream_select($read, $write, $except, null))
{//ожидаем сокеты доступные для чтения (без таймаута)

break;


}

if (in_array($socket, $read))
{

//есть новое соединение
//принимаем новое соединение и производим рукопожатие:

if (($connect = stream_socket_accept($socket, -1)) && $info = handshake($connect))
{

$connects[] = $connect;//добавляем его в список необходимых для обработки

onOpen($connect, $info);//вызываем пользовательский сценарий

}
unset($read[ array_search($socket, $read) ]);

}

foreach($read as $connect)
{//обрабатываем все соединения
$data = fread($connect, 100000);

if (!$data)
{ //соединение было закрыто
fclose($connect);
unset($connects[ array_search($connect, $connects) ]);
onClose($connect);//вызываем пользовательский сценарий
continue;
}

/*
* onMessage($connects, $data) для отправки каждому пользователю своего сообщения
* заменить $connects на $connect и убрать цикл в функции onMessage
*/


onMessage($connects, $data);//вызываем пользовательский сценарий, для отправки одном
}


}


fclose($socket);




}

Он рабочий, но есть одна проблема, если клиент отключается некорректно - т.е. например прервалось соединение с интернетом, то скрипт через некоторый промежуток времени начинает жутко тормозить, до того момента пока тот же самый клиент вновь не наладит связь с сервером! Как сюда внедрить проверку на то, что клиент отключился без посылки команды на отключение? Если закрыть вкладку браузера, то отключение клиента проходит корректно и проблема отсутствует!
UDP: Было замечено, что отсутствующее соединение держится в течении 20 минут, после чего закрывается автоматически!

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.