node.js https нет ответа «конец» события, «закрыть» вместо этого? - PullRequest
22 голосов
/ 30 июня 2011

Я использую node.js v. 0.4.8. Когда я создаю сервер HTTPS, я никогда не получаю событие response.on ('end', ...) (но я делаю это для HTTP). Я прочитал отчеты о проблемах на странице узла 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();

Ответы [ 2 ]

16 голосов
/ 26 января 2012

Я считаю, что эта проблема была исправлена ​​с commit de09168, и в течение нескольких месяцев не было никаких действий по этому вопросу, НО вот ответ:

В комментариях к выпуску 728 Создатель Node.js Райан Даль говорит :

Это не ошибка. Ответы не обязательно имеют конечное событие. Используйте 'close'.

Хотя позже он говорит :

Я забираю то, что сказал раньше. мы, вероятно, должны сделать эту работу.

В любом случае кажется, что close и end в значительной степени совместимы в этом случае использования. Соответствующий код в node.js core tls.js:681 усиливает эту интерпретацию:

process.nextTick(function() {
  self.encrypted.emit('end');
  self.cleartext.emit('end');
  self.encrypted.emit('close');
  self.cleartext.emit('close');
});
9 голосов
/ 30 декабря 2012

Поскольку node.js 0.8.12 finish , событие отправляется функцией завершения HTTP-ответов.Я написал все детали в подобном вопросе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...