我在 nodejs 中有一个使用 npm ws 的简单 websocket 服务器(行为与 npm websocket 相同)。我有一个 .NET 核心后端直接与 ws 服务器通信,提供一个反应前端并以高达 50Hz 的频率发送 30-60KB 消息
我的应用程序旨在能够一次监控多条消息。当我添加对这些消息的订阅时,节点服务器的内存使用量增长得非常快,并且与我添加的消息数量一致(消息越多,增长越快)。但是 websocket 服务器或 websocket 对象似乎在消息缓冲区上挂了很长时间。
通过添加 5 条以上的消息并等待几分钟,我可以为服务器建立多达几 GB 的内存使用量。当我停止消息时,内存使用量停止增长,但仍然好像 wss 将所有内容都保存在内存中。我还尝试清除 ws 对象的可写状态(已注释掉),但这会导致客户端连接出错。有没有办法可以安全地清除这些缓冲区以保持足够低的内存?(请注意,对于 50Hz 信息,无论如何将它们保存在缓冲区中很长时间是不合适的,因为流传输速度非常快)
wss.on('connection', function connection(ws) {
clients.push(ws)
ws.on('message', function incoming(message) {
clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
try {
client.send(message)
}
finally {
// client._socket._writableState.bufferedRequest = null
// client._socket._writableState.lastBufferedRequest = null
}
}
})
});
ws.on('close', function close(data) {
console.log('disconnected');
console.log(data);
});
});