WebSocket: как автоматически подключиться после его смерти
var ws = new WebSocket('ws://localhost:8080');
ws.onopen = function () {
ws.send(JSON.stringify({
.... some message the I must send when I connect ....
}));
};
ws.onmessage = function (e) {
console.log('Got a message')
console.log(e.data);
};
ws.onclose = function(e) {
console.log('socket closed try again');
}
ws.onerror = function(err) {
console.error(err)
};
Когда я впервые подключаюсь к сокету, я должен сначала отправить сообщение на сервер для аутентификации и подписаться на каналы.
Проблема заключается в том, что иногда сервер сокетов ненадежен и запускает события onerror
и onclose
объекта 'ws'
.
Вопрос. Каков хороший шаблон дизайна, который позволит мне, всякий раз, когда сокет закрывает или обнаруживает ошибку, подождите 10 секунд, а затем снова подключитесь к серверу сокета (и отправьте исходное сообщение серверу)
Ответы
Ответ 1
Вот что я закончил. Это работает для моих целей.
function connect() {
var ws = new WebSocket('ws://localhost:8080');
ws.onopen = function() {
// subscribe to some channels
ws.send(JSON.stringify({
//.... some message the I must send when I connect ....
}));
};
ws.onmessage = function(e) {
console.log('Message:', e.data);
};
ws.onclose = function(e) {
console.log('Socket is closed. Reconnect will be attempted in 1 second.', e.reason);
setTimeout(function() {
connect();
}, 1000);
};
ws.onerror = function(err) {
console.error('Socket encountered error: ', err.message, 'Closing socket');
ws.close();
};
}
connect();
Ответ 2
Я нашел очень полезное решение для производства. обратитесь к:
http://www.phpernote.com/html5/1370.html
- проверьте, доступна ли сеть: https://github.com/hubspot/offline
- для повторного подключения: https://github.com/joewalnes/reconnecting-websocket