Dart Websocket 内存泄漏
Posted
技术标签:
【中文标题】Dart Websocket 内存泄漏【英文标题】:Dart Websocket memory leak 【发布时间】:2016-06-06 20:14:05 【问题描述】:我正在使用 websockets 接收协议缓冲区并遇到内存泄漏。无论传入缓冲区大小和频率如何,都会发生这种泄漏。
protobufs 作为 Blobs 被接收,但在作为 arrayBuffer 接收时存在相同的泄漏。目前我所实现的只是一个数据包处理程序,它将 Blob 设置为 null 以尝试调用垃圾收集。
我的听电话:
ws.onMessage.listen(handlePacket);
我的事件处理程序:void handlePacket(message) message = null;
我不完全了解 websocket 中的 messageEvents 流是否是一个未将已处理事件出队的队列,但似乎为传入事件分配的所有内存都未能被垃圾回收。感谢所有帮助。
编辑 客户端代码:
void _openSocket()
if (ws == null)
ws = new WebSocket('ws://localhost:8080/api/ws/open');
// ws.binaryType = "arraybuffer";
void _closeSocket()
if (ws != null)
ws.close();
print("socket closed");
ws = null;
void _openStream (String fieldName, [_])
//Check if we need to open the socket
_openSocket();
//Request the proper data
Map ask = "Request": "Stream", "Field": fieldName;
if (ws.readyState == 0)
ws.onOpen.listen((_)
ws.send(JSON.encode(ask));
);
else
ws.send(JSON.encode(ask));
activeQuantities++;
if (activeQuantities == 1)
_listen();
// Receive data from the socket
_listen()
ws.onError.listen((_)
print("Error");
);
ws.onClose.listen((_)
print("Close");
);
ws.onMessage.listen(handlePacket);
void handlePacket(message)
message = null;
【问题讨论】:
其余代码在哪里?您应该包括复制问题所需的所有内容。 发布了进一步的代码,当单击按钮时,调用 _openStream 来启动套接字连接和/或向请求的数据添加另一个字段。 【参考方案1】:看起来 Dartium 会泄漏内存,但是当使用 Dart2js 并在 Chrome 中运行时,它确实成功地进行了 GC,尽管在显示与 Dartium 中相同的症状之后。 https://github.com/dart-lang/sdk/issues/26660
【讨论】:
以上是关于Dart Websocket 内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章
nodejs Websocket服务器 - 检测到可能的EventEmitter内存泄漏
flv直播流播放视频,websocket响应造成内存泄漏 浏览器崩溃
nodejs setMaxListeners 避免内存泄漏检测