下面是我的代码:
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秒一个)。
Here
我读到我不应该“删除”由创建的每个实例
new WebSocket
。不管怎样,我把它设置为
null
当连接失败或关闭时。
那么为什么它仍然保留旧的实例呢?