【发布时间】:2017-03-14 08:18:28
【问题描述】:
我读到了 nodeJS 的非阻塞特性,以及 I/O 操作是如何非阻塞的。我创建了一个简单的测试来证明这一点
var request = require('request');
var http = require('http');
var express = require('express');
var app = express();
app.get('/test1', function (req, res) {
res.sendStatus(httpStatus.OK);
});
app.get('/test2', function (req, res) {
request.get('https://httpbin.org/delay/15', function () {
res.sendStatus(httpStatus.OK);
});
});
var server = http.createServer(app);
server.listen(3003);
module.exports = app;
这就是整个测试。 test1 端点立即返回 OK,而 test2 由于发送了 http 请求,在 15 秒后返回 OK。当我调用test2 并在调用test1 之后立即调用test1 的响应将在15 秒后返回。如果 I/O 操作是非阻塞的,我希望 test1 的响应将立即返回。
我错过了什么?
更新:
我在 Interceptor 开启的情况下使用 Postman 发送请求。在这种情况下,Postman 一次只能向单个主机发送一个请求。
所以 nodeJS 非阻塞 I/O 工作得非常好,这个问题与 Postman Interceptor 插件有关。
【问题讨论】:
-
我对你的问题有点困惑。您显示的代码是您有疑问的代码吗?还是你做出了改变?
-
@4castle 是的,这就是代码,test2 端点调用服务,15 秒后返回响应
-
我试试你的代码,它工作正常!你如何向你的路线发送请求?
-
尝试在您的控制台中使用
curl -XGET http://localhost:3003/test1它对我有用 -
@David 是的,curl 也可以,所以这是 Postman 特有的问题。似乎一次只能向单个服务器发送一个请求
标签: node.js express postman node-request