2012-01-05 71 views
3

我构建了一个流式https服务器,用于轮询后端服务,并在数据可用时将数据写入http客户端。特定HTTPS请求的代码看起来像这样莫名其妙:如何防止node.js中的流式http/s服务器发生内存泄漏?

// check for new stuff periodically 
var timer = setInterval(function() { 
        var resp = getResponseObject(); 
        response.write(resp + "\n\r"); 
       }, 500); 

// stop looping when the client disconnects 
request.on('close', function() { 
      clearInterval(timer); 
      return; 
      }); 

当客户端断开连接,超时将被清除和循环停止。但是这个关闭事件是否会被触发?还在一个不太干净的客户端断开连接?我担心会留下循环来留下不再存在的连接。 任何想法,如果这是安全的?其他方法?

谢谢!

回答

3

我不相信你需要担心“不干净”的断开 - 当客户端机器突然从网络中删除时,你的服务器将最终得到TCP FIN数据包或ICMP目标不可达消息,这将触发close事件在您的服务器,并允许您清理。

什么可能是更多的资源密集型将成百上千的客户端发送和接收数据如此缓慢你最终结束了所有网络套接字的文件描述符。一个客户端的连接数可能会很低MTU可能会迫使你的应用程序运行几百或几个星期,以100字节为单位的连接。

+0

谢谢,非常有帮助! – pors 2012-01-06 09:15:02