我在使用npm ws的nodejs中有一个简单的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);
});
});