如何在NodeJS中测量http.ClientRequest响应时间?

时间:2014-11-17 16:30:38

标签: javascript node.js http client performance-testing

我正在从我的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 是我迄今为止最好的选择,但其描述如下:

  

将套接字分配给此请求后发出。

并不能确定这是否是我正在寻找的事件..所以,我的问题是 - 我做得对吗还是有更好的事件我可以使用(甚至更好的方式来做整件事)?感谢。

1 个答案:

答案 0 :(得分:3)

是的,我的理解是socket事件是要走的路。

对于一些证明:在Node.js HTTP代码中,this.emit('socket')恰好在this.socket.write(data, encoding)之前发生。

那里有一张我不确定的支票:

if (!this.socket.writable) return; // XXX Necessary?

因此,在您的socket事件处理程序中,您可能希望执行相同的检查,看看是否有回来说套接字不可写。