2012-05-26 12 views
7

मेरे पास एक नोडजेएस ऐप है जो HTTP को कोड में विभिन्न स्थानों से अनुरोध प्राप्त करता है, कुछ भी निर्भर हैं (एक अनुरोध भेजना, उत्तर देने का इंतजार करना, इसे संसाधित करना और अन्य अनुरोध भेजने के परिणामों के आधार पर)। मुझे अनुरोधों की दर सीमित करने की आवश्यकता है (उदा।, प्रति घंटे 10 अनुरोध)।अपनी दर को नियंत्रित करने के लिए http को नोडजेस में अनुरोध प्राप्त करने के लिए कैसे कतारबद्ध करें?

मैंने अनुरोधों को क्यूइंग करने के बारे में सोचा और फिर कुछ केंद्रीय बिंदुओं पर उन्हें नियंत्रित तरीके से जारी किया, लेकिन कॉलबैक फ़ंक्शंस और उनके आश्रित पैरामीटर को कतारबद्ध करने के तरीके पर अटक गया।

सुझावों को सुनकर खुशी होगी कि इस परिदृश्य को ऐप के लिए न्यूनतम पुनर्गठन के साथ कैसे आना है।

धन्यवाद

उत्तर

6

मुझे लगता है कि आपने पहले से ही अपने प्रश्न का उत्तर दिया है। एक केंद्रीय कतार जो आपके अनुरोधों को थ्रोटल कर सकती है वह रास्ता है। यहां एकमात्र समस्या यह है कि कतार में अनुरोध और कॉलबैक (ओं) के लिए पूरी जानकारी होनी चाहिए जिसका उपयोग किया जाना चाहिए। मैं एक QueueableRequest वस्तु में इस सार यह कुछ ऐसा दिखाई देगा कि हो सकता है:

var QueueableRequest = function(url, params, httpMethod, success, failure){ 
    this.url = url; 
    this.params = params; 
    ... 

} 
//Then you can queue your request with 

queue.add(new QueueableRequest({ 
    "api.test.com", 
    {"test": 1}, 
    "GET", 
    function(data){ console.log('success');}, 
    function(err){ console.log('error');} 
})); 

बेशक यह सिर्फ नमूना कोड है कि बहुत खूबसूरत हो सकता है, लेकिन मुझे आशा है कि आप चित्र मिलता है।

+1

धन्यवाद! यह वही है जो मैं याद कर रहा था। यह बहुत अच्छा काम करता है – user971956

0

मैं Deferreds का उपयोग करें और हर पंक्तिबद्ध अनुरोध के लिए एक वापसी होगी। इसके बाद आप कतारबद्ध होने के बाद स्थगित वादे में सफल/असफल कॉलबैक जोड़ सकते हैं।

var deferred = queue.add('http://example.com/something'); 
deferred.fail(function(error) { /* handle failure */ }); 
deferred.done(function(response) { /* handle response */ }); 

आपकी कतार में एक [ url, deferred ] जोड़े पकड़ सकते हैं, और हर बार जब आप एक URL विपंक्ति आप भी स्थगित है कि यह साथ चला जाता है, तो आप को हल या आप अनुरोध पर कार्रवाई के बाद असफल हो सकता है जो करना होगा।

1

Async मॉड्यूल में कई नियंत्रण प्रवाह विकल्प हैं जो आपकी मदद कर सकते हैं। queue एक अच्छे फिट की तरह लगता है, जहां आप concurrency सीमित कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे