在node.js中制作传出http请求的最简单方法是什么,同时跟踪时间:查找DNS,连接服务器,第一个字节的时间,完成时间等等?
我已经尝试了request
和needle
模块,但它们似乎没有此功能。我应该使用普通的http
模块来解决我自己的解决方案吗?
答案 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 }