了解Node中的非阻塞IO

时间:2015-12-05 11:02:31

标签: node.js express nonblocking

这些代码有什么区别?

***首先*

var express = require('express');
var app = express();

app.post('/', function (req, res) {

    console.log('Procesando abastecimiento...');

    var rawData = '';

    req.on('data', function (chunk) {
        rawData += chunk;
    });

    req.on('end', function(){
        console.log('Data recibida: ' + rawData);
        res.end();
    });    
});

第二

var express = require('express');
var app = express();

app.post('/', function (req, res) {

    console.log('Procesando abastecimiento...');

    var rawData = '';

    req.on('data', function (chunk) {
        rawData += chunk;
    });

    req.on('end', function(){
        console.log('Data recibida: ' + rawData);    
    }); 

    res.end();   
});

如果我关闭内部的连接(res.end())'结束'事件的回调,客户端会等到读取所有数据吗?我不明白其中的区别,我只知道我的代码使用第二种方式更快。你能解释一下为什么吗?

1 个答案:

答案 0 :(得分:1)

在第一个示例中,您设置要在请求res.end();回调上执行的end指令(即,然后引发end事件)。

在第二个中,您可以立即致电res.end();,而无需等待结束请求。

您可以将其视为指令req.on('end', ...)是为将来会发生的事件设置处理程序的函数,但是在收到事件之前不会执行代码。