Websocket服务器内存泄漏:大消息

时间:2019-02-26 22:03:54

标签: node.js websocket ws

我在使用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);
  });

});

0 个答案:

没有答案