2014-07-16 3 views
0

Когда я намеренно закрыли сервер веб-сокетов клиента JavaScript код:Web сокет не может быть пойман

try 
{ 
    self.socket.send('ping'); 
} 
catch(ex) 
{ 
    console.log('exception'); 
} 

пишет в Chrome консоли:

WebSocket is already in CLOSING or CLOSED state. 

Это исключение не может быть пойманной с помощью try-catch. Как точно определить, что данные не могут быть отправлены через веб-сокет? Событие onclose не запускается.

ответ

1

Я примирился с тем, что ошибка не была поймана и реализована решение для пинг-понга.

JavaScript отправляет каждые n секунд команду «ping», и сервер должен отвечать «понг». Если более 5 «пингов» были отправлены без ответа, инициируется повторное подключение.

1

Вы можете проверить readyState.

try 
{ 
    if (self.socket && self.socket.readyState === 1) { 
    self.socket.send('ping'); 
    } 
    else { 
    throw(new Error("WebSocket is not in OPEN state.")); 
    } 
} 
catch(ex) 
{ 
    console.log('exception', ex); 
} 
Смежные вопросы