最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如果没有调用res.end,http服务器无法处理新的请求?

IT培训 admin 7浏览 0评论

如果没有调用res.end,http服务器无法处理新的请求?

我有这个代码:

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: ...

但实际上它是:

每个请求都被前一个请求阻止。

这是因为我在当地测试

有一些连接问题?

任何帮助都会很棒,谢谢!

回答如下:

你的期望(几乎)是正确的。

那么为什么你没有收到正确的输出?它实际上是浏览器的行为。至少是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)

如果没有调用res.end,http服务器无法处理新的请求?

我有这个代码:

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: ...

但实际上它是:

每个请求都被前一个请求阻止。

这是因为我在当地测试

有一些连接问题?

任何帮助都会很棒,谢谢!

回答如下:

你的期望(几乎)是正确的。

那么为什么你没有收到正确的输出?它实际上是浏览器的行为。至少是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)
发布评论

评论列表 (0)

  1. 暂无评论