我有这段代码:
var http = require('http');
var count = 0;
var server = http.createServer(function(req, res) {
//....
if (req.url == '/') {
count++;
console.log('request' + count + ' enter:' + new Date())
setTimeout(function() {
res.end('response data');
console.log('request' + count + ' leave:' + new Date())
}, 3000)
console.log('end')
}
}).listen(3000)
然后我打开浏览器,打开三个标签快速访问我的服务器。
我的期望是:
request1 enter: ...
end
request2 enter: ...
end
request3 enter: ...
end
request1 leave: ...
request2 leave: ...
request3 leave: ...
但实际上是:
每个请求都被前一个请求阻止。
这是因为我在本地测试
有一些连接问题?
任何帮助都会很棒,谢谢!
答案 0 :(得分:1)
您的期望(几乎)正确。
那么为什么你没有收到正确的输出?它实际上是浏览器的行为。至少是chrome - 当我一次打开3个标签并从所有这些标签请求localhost:3000时,它没有发送3个请求 - 它只发送一个请求并在使用其他请求之前等待响应。
我一次使用了1个curl命令和1个chrome请求(这意味着我尽可能快地点击了这些)这就是发生的事情:
您期望不正确的唯一部分是当时“离开”回复的价值,“计数”对所有人来说都是相同的。
要获得精确所需的输出,您可以记住功能范围内的实际计数:
var http = require('http');
var count = 0;
var server = http.createServer(function(req, res) {
//....
if (req.url == '/') {
count++;
var requestCount = count;
console.log('request' + requestCount + ' enter:' + new Date())
setTimeout(function() {
res.end('response data');
console.log('request' + requestCount + ' leave:' + new Date())
}, 3000)
console.log('end')
}
}).listen(3000)