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

Nik*_*kov 22 https node.js

我正在使用node.js v.4.4.8.当我创建一个HTTPS服务器时,我从来没有得到response.on('end',...)事件(但我做的是HTTP事件).我在node的github页面上阅读了问题报告 - https://github.com/joyent/node/issues/728,显然这是一个回归到0.4.8的问题.response.on('close',...)似乎具有相同的功能,但我不太了解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();
Run Code Online (Sandbox Code Playgroud)

Dan*_*del 16

我相信这个问题在提交时de09168已经修复,并且几个月来一直没有针对这个问题采取任何行动,但这里的答案是:

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

这不是一个错误.回复不保证会有"结束"事件.使用'关闭'.

虽然后来他:

我收回我之前说过的话.我们应该做这个工作.

似乎无论哪种方式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');
});
Run Code Online (Sandbox Code Playgroud)


Dar*_*añé 9

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