node.js计时http请求

时间:2012-02-04 21:49:20

标签: node.js timing

我正在尝试响应请求需要多长时间。

现在我在 httpServer 请求事件上创建时间戳,问题是 httpServerResponse 不会发出 end 并且在不同的位置调用完成响应的结束函数,我不想在所有这些位置添加此代码。

有更好的方法吗?

var server = http.createServer();

server.on('request', dispatch);

function dispatch(req, res){
   var start = Date.now();
   // No such event so never fired
   res.on('end', function(){
      console.log('requests.time', Date.now() - start);
   });
   generateResponse(req, res);
}

1 个答案:

答案 0 :(得分:4)

您可以覆盖原始的res.end()函数并从中调用原始函数:

var server = http.createServer();

server.on('request', dispatch);

function dispatch(req, res){
   var start = Date.now();

   var original=res.end;

   res.end=function(txt,encoding){
     console.log('requests.time', Date.now() - start);
     original.call(this,txt,encoding);
   }   

   generateResponse(req, res);
}

function generateResponse(req,res){
    setTimeout(function(){ // simulate some processing
        res.end('hi');
    },1000);
}