Вот как выглядит мой код:
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);
}
};
Он должен работать следующим образом:
- при запуске (
init
) пытается подключиться - если не удается (
onError
), он пытается снова через 3 с - , если успешно (
onOpen
), а затем соединение закрывается (onClose
), он пытается снова через 3 с
Это работает, но на сервере WebSocket я получаю ряд новых подключений, сколько раз они выходили из строя. Например, я запускаю клиентское приложение и через 30 с запускаю сервер. Теперь у меня открыто около 10 соединений (по одному каждые 3 с).
Здесь Я прочитал, что не стоит заботиться об «удалении» каждого экземпляра, созданного new WebSocket
. В любом случае я устанавливаю его на null
, когда соединение не удается или закрывается.
Так почему же он сохраняет старые экземпляры?