代码之家  ›  专栏  ›  技术社区  ›  Mark

WebSocket的失败连接保持活动状态

  •  0
  • Mark  · 技术社区  · 6 年前

    下面是我的代码:

    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秒一个)。

    Here 我读到我不应该“删除”由创建的每个实例 new WebSocket 。不管怎样,我把它设置为 null 当连接失败或关闭时。

    那么为什么它仍然保留旧的实例呢?

    0 回复  |  直到 6 年前