WebSocket重新连接方法似乎导致内存泄漏,并且不确定为什么

时间:2019-06-28 16:01:29

标签: javascript html websocket memory-leaks

说明:

套接字关闭或错误拔出5秒钟后,Websocket将重新连接。我怀疑对原始套接字连接的引用缓存在堆中,一段时间后,这种堆积使Web浏览器崩溃。我不确定我的猜想是否正确。

我研究了Chrome Devtools的内存检查,似乎WebSocket对象正在堆积,最终导致浏览器崩溃。 我的代码看起来与this Websocket logic非常相似,这似乎是一种常见的方法,但是我不确定为什么会有内存泄漏。

内存屏幕截图1:

这是第一次建立连接(注意:它在本地运行)。 enter image description here

内存屏幕截图2:

这是第四次连接(第三次重新连接)之后的结果,您可以看到内存中现在有 10 个WebSocket对象。 enter image description here

如果由于套接字closed/erred状态而导致重新连接反复失败,则一段时间后,内存超过了 1GB ,最终导致浏览器崩溃。

更新内存屏幕截图3: enter image description here

相关代码段:

function webSocketConnection(url, callback) {
  const ws = new WebSocket(url);
  ws.onopen = e => console.log("socket connected");
  ws.onmessage = e => {
      if (callback) {
        callback(e);
      }
  };

  ws.onclose = function(e) {
    console.log("rt-closed:", e);
    setTimeout(function() {
      webSocketConnection(url, callback);
    }, 5000);
  };

  ws.onerror = function(error) {
    console.error("rt-error:", error);
    ws.close();
  };
}

0 个答案:

没有答案