Неудачные соединения WebSocket остаются живыми - PullRequest
1 голос
/ 29 февраля 2020

Вот как выглядит мой код:

var ws = null;

var _open = function(address) {
    ws = new WebSocket(address);
    ws.onopen = onOpen;
    ws.onclose = onClose;
    ws.onmessage = onMessage;
    ws.onerror = onError;
};

var close = function() {
    if (ws) ws.close();
};

var onOpen = function() {
    // do something
};

var onClose = function() {
    ws = null;
    retry();
};

var onError = function(event) {
    ws = null;
    retry();
};

var onMessage = function(event) {
    // do something
};

var retry = function() {
    setTimeout(function() { 
        // extract what I need from location.href
        var address = composeWsAddress(extractHostname(location.href));
        _open(address);
    }, 3000);
};

WebSocketClient = {
    init: function() {
        var address = composeWsAddress(extractHostname(location.href));
        _open(address);
    }
};

Он должен работать следующим образом:

  1. при запуске (init) пытается подключиться
  2. если не удается (onError), он пытается снова через 3 с
  3. , если успешно (onOpen), а затем соединение закрывается (onClose), он пытается снова через 3 с

Это работает, но на сервере WebSocket я получаю ряд новых подключений, сколько раз они выходили из строя. Например, я запускаю клиентское приложение и через 30 с запускаю сервер. Теперь у меня открыто около 10 соединений (по одному каждые 3 с).

Здесь Я прочитал, что не стоит заботиться об «удалении» каждого экземпляра, созданного new WebSocket. В любом случае я устанавливаю его на null, когда соединение не удается или закрывается.

Так почему же он сохраняет старые экземпляры?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...