如何在Node.js的流式HTTP/S服务器中防止内存泄漏?

3

我建立了一个流式https服务器,它轮询后端服务并在数据可用时将数据写入http客户端。一个特定的https请求代码看起来像这样:

// 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;
             });

当客户端断开连接时,超时将被清除,循环停止。但是,这个关闭事件是否总是会被触发?即使在断开不太干净的客户端上也是如此吗?我担心为已经不存在的连接留下循环。
您有什么安全的建议吗?还有其他方法吗?
谢谢!
1个回答

3

我认为你不必担心“脏”的断开连接——当客户端突然从网络中移除时,你的服务器最终会收到TCP FIN数据包或ICMP目标不可达消息,这会触发服务器的close事件并允许你进行清理。

更耗费资源的可能是数百或数千个客户端发送和接收数据的速度非常慢以至于你最终会因为所有网络套接字的文件描述符用完而无法正常工作。一个使用极低MTU连接的客户端可能会导致你的应用程序通过100字节块将大量数据流传输了数日或数周。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接