如何在node.js中配置传出的http请求?

时间:2017-10-30 15:08:40

标签: javascript node.js request

在node.js中制作传出http请求的最简单方法是什么,同时跟踪时间:查找DNS,连接服务器,第一个字节的时间,完成时间等等?

我已经尝试了requestneedle模块,但它们似乎没有此功能。我应该使用普通的http模块来解决我自己的解决方案吗?

2 个答案:

答案 0 :(得分:0)

request包装http模块,以便您可以使用请求对象发出的'socket'事件来侦听net.Socket个事件。

根据您的问题,您可以收听套接字上的'lookup''connect''data''close'事件,并使用console.time()和{{3跟踪操作所需的时间。

// You can use request from npm
const request = require('request')

// Or the native http/https module
// const {request} = require('https')

// Store the http.ClientRequest object returned
const req = request('https://www.google.com')

// Listen for the 'socket' event and then attach listeners to the socket
req.on('socket', socket => {
  console.time('dnsInfo')

  socket.once('lookup', (err, address, family, host) => {
    console.timeEnd('dnsInfo')
    console.log(address, family, host)
  })

  socket.once('connect', () => {
    console.time('requestTime')
    console.time('initialData')
    console.log('Connected to server')
  })

  socket.once('data', chunk => console.timeEnd('initialData'))
  socket.once('close', () => console.timeEnd('requestTime'))
})

req.end()

答案 1 :(得分:0)

似乎request实际上支持通过添加time选项来衡量时间的选项:

request = require 'request'

opts =
    url: 'http://localhost/redirect.php'
    time: true

request opts, (e, r, body) ->
    console.log r.timingPhases

打印

{ wait: 4.005603000000008,
  dns: 0.5604900000000157,
  tcp: 0.2195809999999483,
  firstByte: 1.0195130000000177,
  download: 0.7950860000000262,
  total: 6.600273000000016 }