2013-08-07 9 views
7

NodeJS request पुस्तकालय का उपयोग करना: कॉलबैक पर प्रतिक्रिया समय प्राप्त करने के लिए https://github.com/mikeal/requestNodeJS अनुरोध पुस्तकालय, मिल प्रतिक्रिया समय

var request = require('request'); 
request('http://example.com', function (error, response, body) { 
    ... 
}) 

क्या यह संभव है? डॉक्टर ने प्रतिक्रिया का उल्लेख किया है। स्टेटस कोड। लाइब्रेरी स्रोत कोड को देखते हुए मैं अनियंत्रित प्रतिक्रिया भी देखता हूं। शीर्षलेख और प्रतिक्रिया.href, लेकिन मुझे प्रतिक्रिया समय या समान दिखाई नहीं देता है।

या, क्या request पर कोई वैकल्पिक लाइब्रेरी है जो प्रतिक्रिया समय प्रदान करती है?

ps: मुझे पता है कि मैं ऐसा कुछ कर सकता हूं, लेकिन यह कोई समाधान नहीं है, क्योंकि मैं कई एसिंक अनुरोध कर रहा हूं और प्रत्येक अनुरोध शुरू होने पर मैं नियंत्रण नहीं कर सकता।

var request = require('request'); 
var start = new Date(); 
request('http://example.com', function (error, response, body) { 
    ... 
    var responseTime = new Date() - start; 
}) 

उत्तर

10

अनुरोध पुस्तकालय आप के लिए समय कर सकते हैं (docs): प्रश्न का तात्पर्य

request.get({ 
    url : 'http://example.com', 
    time : true 
},function(err, response){ 
    console.log('Request time in ms', response.elapsedTime); 
}); 

रूप में, आप के दृष्टिकोण के साथ मुद्दों हो सकता है एक टाइमर शुरू करना, request पर कॉल करना, फिर कॉलबैक में टाइमर को रोकना:

var start = new Date(); 
request.get('http://example.com', function(err, response){ 
    // NOT GOOD 
    console.log('Request time plus 5 seconds', new Date() - start); 
}); 
require('sleep').sleep(5); // time-consuming synchronous action 
6

कुछ की तरह

var timedReq = function(url, next) { 
    var start = new Date(); 
    request(url, function(err, res, body) { 
    res.responseTime = new Date() - start; 
    next(err, res, body); 
    }); 
}; 

यह तुम्हारे लिए क्या करेंगे। यह इतना छोटा लगता है कि यह एक नई पुस्तकालय खोजने से शायद आसान है।

+1

मैं तिथि के बजाय http://nodejs.org/api/process.html#process_process_hrtime का उपयोग करने की अनुशंसा करता हूं। मैं इसे http://arrowbreaker.com/demos/sup के लिए उपयोग करता हूं और यह बहुत सटीक परिणाम देता है। – Pickels

+0

@ पिक्सेल ने इसके बारे में नहीं सुना था। मैं अपने उदाहरण में '[सेकंड, एनएस]' सरणी से निपटने की जटिलताओं को पेश नहीं करना चाहता, लेकिन यह एक अच्छा विचार प्रतीत होता है। –

+5

बिल्कुल जटिल नहीं है! 'var start = process.hrtime();' और 'res.responseTime = parseInt (process.hrtime (प्रारंभ) [1]/10000000, 10); ठीक है, मैंने झूठ बोला। – Pickels

2

दिनांक() का उपयोग करने के बजाय आप process.hrtime का भी उपयोग कर सकते हैं। मेरे पास विशेष रूप से इस तरह के मामलों के लिए एक लाइब्रेरी है जो एचआरटाइम का उपयोग करती है। पुस्तकालय का नाम exectimer है।

आप इस तरह इसका इस्तेमाल कर सकते हैं:

var timedReq = function(url, next) { 
    var tick = new t.Tick("responseTime"); 
    tick.start(); 
    request(url, function(err, res, body) { 
    tick.stop(); 
    next(err, res, body); 
    }); 
}; 

// when ready check the results with this: 
var responseTime = t.timers.responseTime; 
console.log(responseTime.min()); // minimal response time 
console.log(responseTime.max()); // minimal response time 
console.log(responseTime.mean()); // mean response time 
console.log(responseTime.median()); // median response time 
संबंधित मुद्दे