node.js https没有响应'结束'事件,'closures'而不是?

我正在使用node.js v。0.4.8。 当我创build一个HTTPS服务器时,我从来没有得到response.on('end',…)事件(但我做了一个HTTP)。 我阅读了node的github页面上的问题报告 – https://github.com/joyent/node/issues/728 ,显然这是一个退化为0.4.8的问题。 response.on('close',…)似乎具有相同的function,但我对HTTP / HTTPS判断不够了解。 我可以使用它作为response.on('end',…)的替代品,这是否有可能在未来导致任何问题?

你可以在下面看到一个代码示例。 提前致谢!

var request = "JSON_request"; var https = require('https'); var options = { host:"someHost.com", path:"somePath", method: "POST", headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(request) } }; var req = https.request(options, function(res){ var response = ""; res.setEncoding('utf8'); res.on('data', function(chunk){ console.log("INFO: "+chunk); response += chunk; }); // This never happens res.on('end', function(){ console.log("End received!"); }); // But this does res.on('close', function(){ console.log("Close received!"); }); }); req.on('error', function(error){ console.log("Error: "+error); }); req.write(request); req.end(); 

我相信这个问题在de09168提交时已经被确定了,几个月来对这个问题没有采取任何行动,但这里是答案:

关于问题的评论728 Node.js创build者Ryan Dahl 说 :

这不是一个错误。 回应不保证有“结束”事件。 使用“closures”。

虽然后来他说 :

我收回之前所说的话。 我们可能应该做这个工作。

无论哪种方式,它似乎close并在这种使用情况下end几乎互操作。 node.js核心中的相关代码tls.js:681强调了这种解释:

 process.nextTick(function() { self.encrypted.emit('end'); self.cleartext.emit('end'); self.encrypted.emit('close'); self.cleartext.emit('close'); }); 

由于node.js 0.8.12 完成事件是在HTTP响应的结束函数上发出的。 我用类似的问题写了所有的细节。