Я пытаюсь использовать веб-сокеты с Javascript, и я заметил, что медленно открывать его после сбоя соединения:
function start_socket() {
var ws = new WebSocket("ws://localhost:8000");
ws.onopen = function() {
console.log("Socket opened");
};
ws.onmessage = function(e) {
console.log("Received message: " + e.data);
};
ws.onclose = function(e) {
start_socket();
};
}
start_socket();
У меня очень простой сервер на localhost:8000
, который просто отправляетвернуть сообщение, когда он получает соединение.Если сервер уже запущен, когда сценарий выполняется, он сразу же работает, но если я запускаю сценарий, а затем сервер, может потребоваться несколько секунд, чтобы получить сообщение.
Я пробовал другую версию:
var ntries = 0;
function start_socket() {
ws = new WebSocket("ws://localhost:8000");
ws.onopen = function() {
console.log("Socket opened");
};
ws.onmessage = function(e) {
console.log("Received message: " + e.data);
};
ws.onclose = function(e) {
ntries++;
console.log(ntries);
start_socket();
};
}
start_socket();
В этой версии я вижу в журнале, что число повторений увеличивается относительно медленно (иногда одна попытка выполняется сразу после последней, иногда это занимает несколько секунд).
Окончательная версия:
var ntries = 0;
var is_open = false;
function start_socket() {
ws = new WebSocket("ws://localhost:8000");
ws.onopen = function() {
is_open = true;
console.log("Socket opened");
};
ws.onmessage = function(e) {
console.log("Received message: " + e.data);
};
ws.onclose = function(e) {
is_open = false;
ntries++;
console.log(ntries);
start_socket();
};
setTimeout(function() {
if(! is_open)
ws.close();
}, 500);
}
start_socket();
Здесь число повторных попыток увеличивается каждые 500 мс, как ожидается, но требуется много повторных попыток, прежде чем он подключится к серверу.Иногда я даже не получаю сообщение, даже если его отправил сервер.