美文网首页代码
通过express统计你的请求响应时间

通过express统计你的请求响应时间

作者: 忧郁的河蟹 | 来源:发表于2015-06-06 23:24 被阅读1658次

    某天,河蟹君遇到一个需求,统计express服务器得api相应时间。基本思路是:当请求过来得时候,记录一下当前时间t1,然后api响应结束时间是t2, 响应时间 = t2 - t1

    嗯,实现思路很清晰,另外,最好利用express的中间件机制来实现,这样才能够做到,足够的通用性,监听所有api的响应情况。

    那么问题来了,需要知道中间件是从将请求处理,从一个中间件的数据流到另外一个中间件知道数据输出,我们虽然能够轻松地记录到t1,但是t2 却因为这种模型而变得获取困难,难道我们需要再每次响应的时候,特意记录一下t2,想想都觉得是一个非常庞大的工程。

    如果你也遇到这种问题,河蟹君,确实有个办法解决

    exports.responseTime = function () {
        return function (req, res, next) {
                req._startTime = new Date() // 获取时间 t1
    
            var calResponseTime = function () {
            var now = new Date(); //获取时间 t2
            var deltaTime = now - req._startTime;
                    console.log(deltaTime);
            }
    
            res.once('finish', calResponseTime);
            res.once('close', calResponseTime);
            return next();
       }
    
    }
    

    使用中间件

    app.use(responseTime())
    

    express 里面拥有一个事件机制,通过监听 finishclose 事件,可以知道请求到底什么时候结束,监听这个事件,并在事件处理的过程当中,获取t2 ,计算出响应时间,这里值得注意的是,监听的方法是once,即监听一次后,并自动解除监听,如果用了on 方法,每次请求都会产生一次监听,请求多了,内存会泄漏,这里需要十分注意。

    相关文章

      网友评论

      本文标题:通过express统计你的请求响应时间

      本文链接:https://www.haomeiwen.com/subject/gsodqttx.html