Node.js http GET请求比浏览器,REST客户端等需要更长的时间

时间:2015-04-21 01:54:11

标签: node.js request

我尝试在Node.js中创建一个简单的GET请求,并且请求需要3-5秒才能解析,而浏览器或REST客户端中的相同请求需要大约400毫秒。我提出请求的服务器由我们的服务器团队控制,但在我用请求/资源监控打扰他们之前,我打算ping社区,看看是否有“嘿,先检查此设置”你们可以提供的提示。

代码基本上将传入的请求转发给我们的服务器:

http.createServer(function (req, res) {
    http.request({
        host: "our.private.host",
        port: 8080,
        path: req.url,
        headers: req.headers
    }, function () {
        res.end("DONE: " + Date.now());
    }).end();
}).listen(8001);

我打开浏览器并输入以下网址:

  

http://localhost:8001/path/to/some/resource

...转发到最终目的地:

  

http://our.private.host:8080/path/to/some/resource

一切正常,我得到了我想要的响应,但需要3-5秒才能解决。如果我将最终目标URL直接粘贴到浏览器或REST客户端中,它会快速解析。遗憾的是,我对我们的服务器了解不多 - 但此时我正在寻找更多节点提示。请注意,请求池不会超出,因为我一次只能从本地计算机发出1个请求。

1 个答案:

答案 0 :(得分:1)

第一步是通过查看节点服务器上网络活动的确切时间,收集有关请求花费时间的信息。您可以通过获取监视所有网络活动的工具来实现此目的。我个人使用Fiddler,但我知道WireShark也很受欢迎。

安装并激活该工具后,您可以查看请求过程中所有这些不同步骤的持续时间:

  1. 解析目标IP地址的DNS请求
  2. 连接目标服务器的时间
  3. 发送http请求的时间
  4. 接收http请求的时间
  5. 将回复发送回原始请求的时间
  6. 了解这些操作中的哪些操作比预期的要长得多,这样可以让您了解在哪里进一步查看问题。

    仅供参考,有nginx等预先构建的工具可以通过在配置文件中设置一些值而无需任何自定义编码来执行此类代理。