了解 Node 中的非阻塞 IO
Understanding non-blocking IO in Node
这些代码有什么区别?
***第一*
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();
});
如果我在 'end' 事件的回调中关闭连接 (res.end()
),客户端是否会等待所有数据读取完毕?我不明白其中的区别,我只知道使用第二种方式我的代码更快。你能解释一下为什么吗?
在第一个示例中,您将 res.end();
指令设置为在请求 end
回调时执行(即引发 end
事件)。
在第二个中,您立即调用 res.end();
,无需等待请求结束。
你可以把它想象成指令req.on('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();
});
});
第二
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();
});
如果我在 'end' 事件的回调中关闭连接 (res.end()
),客户端是否会等待所有数据读取完毕?我不明白其中的区别,我只知道使用第二种方式我的代码更快。你能解释一下为什么吗?
在第一个示例中,您将 res.end();
指令设置为在请求 end
回调时执行(即引发 end
事件)。
在第二个中,您立即调用 res.end();
,无需等待请求结束。
你可以把它想象成指令req.on('end', ...)
是一个函数,它为将来会发生的事件设置一个处理程序,但是那里的代码直到接收到事件才执行。