说明:
套接字关闭或错误拔出5秒钟后,Websocket将重新连接。我怀疑对原始套接字连接的引用缓存在堆中,一段时间后,这种堆积使Web浏览器崩溃。我不确定我的猜想是否正确。
我研究了Chrome Devtools的内存检查,似乎WebSocket对象正在堆积,最终导致浏览器崩溃。 我的代码看起来与this Websocket logic非常相似,这似乎是一种常见的方法,但是我不确定为什么会有内存泄漏。
内存屏幕截图1:
内存屏幕截图2:
这是第四次连接(第三次重新连接)之后的结果,您可以看到内存中现在有 10 个WebSocket对象。
如果由于套接字closed/erred
状态而导致重新连接反复失败,则一段时间后,内存超过了 1GB ,最终导致浏览器崩溃。
相关代码段:
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();
};
}