2012-01-05 30 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