2011-07-12 71 views
3

如果我在命令行中運行它,程序將在client.destroy();之後停止。如何很好地銷燬Node.js http.request連接?

var client = http.get(options, 
     function(res) { 
      console.log(res.statusCode); 
      client.destroy(); 
      } 
); 

然而,事實並非如此,當我把client.destroy()的res.on( '結束')內:

var client = http.get(options, 
     function(res) { 
      console.log(res.statusCode); 
      res.on('end', function() { 
       console.log("done"); 
       client.destroy(); 
      }); 
      } 
); 

它會拋出異常,因爲http.socket一片空白。所以,我不能銷燬它。

在這種情況下,程序執行會掛在那裏,不會結束。我能做些什麼來阻止它? (除了process.exit());

回答

4

,如果它是你可以設置shouldKeepAlive假

var request = http.get(options, 
     function(res) { 
      console.log(res.statusCode); 
      } 
); 
request.shouldKeepAlive = false 

或發送Connection: close

,因爲它是在the request 'end' event handler

+1

detached當我這樣做,你不能訪問插座的要求單個請求.shouldKeepAlive「,是否會影響套接字池中的任何內容? – murvinlai

+0

使用Connection標頭可能會更好,在此處進行分析 - https://github.com/joyent/node/blob/master/lib/htt p.js#L442這會影響請求shouldKeepAlive標誌 –

+0

當然..讓我試試。 – murvinlai