【问题标题】:How to measure http.ClientRequest response time in NodeJS?如何测量 NodeJS 中的 http.ClientRequest 响应时间?
【发布时间】:2015-01-14 15:14:55
【问题描述】:

我正在从我的 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 是我目前最好的选择,但它的描述:

在一个套接字分配给这个请求之后发出。

并不能真正说明这是否是我正在寻找的事件.. 所以,我的问题是 - 我这样做是否正确,或者是否有更好的事件可以使用(或者甚至是做整个事情的更好方法)?谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    举个例子:在 Node.js HTTP 代码中,this.emit('socket') 发生在 this.socket.write(data, encoding) 之前。

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2020-12-27
      • 2016-07-10
      相关资源
      最近更新 更多