我正在从我的NodeJS应用程序创建http请求,如下所示:
var start;
var req = http.request(options, function (res) {
res.setEncoding('utf8');
var body = '';
res.on('data', function (chunk) {
body += chunk;
});
res.on('end', function () {
var elapsed = process.hrtime(start)[1] / 1000000; // in milliseconds
console.log(elapsed);
// whatever
});
});
req.on('socket', function (res) {
start = process.hrtime();
});
req.on('error', function (res) {
// whatever
});
if (props.data) req.write(props.data);
req.end();
我想知道我的请求需要多长时间 - 从请求通过网络(而不是创建承诺的那一刻)开始(或者最接近我可以到达),直到“响应结束”事件开始的时刻。
我在寻找最接近的时刻/事件时遇到了一些麻烦,我可以开始测量时间。 Http客户端 socket event 是我迄今为止最好的选择,但其描述如下:
将套接字分配给此请求后发出。
并不能确定这是否是我正在寻找的事件..所以,我的问题是 - 我做得对吗还是有更好的事件我可以使用(甚至更好的方式来做整件事)?感谢。
答案 0 :(得分:3)
是的,我的理解是socket
事件是要走的路。
对于一些证明:在Node.js HTTP代码中,this.emit('socket')
恰好在this.socket.write(data, encoding)
之前发生。
那里有一张我不确定的支票:
if (!this.socket.writable) return; // XXX Necessary?
因此,在您的socket
事件处理程序中,您可能希望执行相同的检查,看看是否有回来说套接字不可写。