[英]What's the optimal way to perform a large quantity of http requests in Node.js?
[英]How to perform several http requests with node.js
我需要執行幾個http請求。 我有一個url數組,當每個請求完成時, JSON object
被推入一個數組。 當所有請求完成后, JSON object
將使用新構造的Array
發送到客戶端。 如果我在做這個客戶端,我會使用類似jQuery
的Deferred對象。 是否有另一種方法使用node.js
而不必import jQuery's Deferred object
? 似乎不會使用事件發射器來處理這個問題。 或者是嗎? 謝謝!
這是一個可能的解決方案。
該類擴展了EventEmitter。 它的作用是對每個異步請求響應,我們發出已完成的異步請求的計數並存儲響應的主體。
var UrlHandler, events, request, urlHandler,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
events = require("events");
request = require("request");
UrlHandler = (function(_super) {
__extends(UrlHandler, _super);
function UrlHandler() {
return UrlHandler.__super__.constructor.apply(this, arguments);
}
UrlHandler.prototype.getUrls = function(urls) {
var processedUrls, url, urlhandler, _i, _len, _results;
processedUrls = 0;
urlhandler = this;
urlhandler.urlResponse = [];
_results = [];
for (_i = 0, _len = urls.length; _i < _len; _i++) {
url = urls[_i];
_results.push(request({
uri: url
}, function(error, response, body) {
urlhandler.urlResponse.push(response);
processedUrls++;
return urlhandler.emit("processed:" + processedUrls);
}));
}
return _results;
};
return UrlHandler;
})(events.EventEmitter);
urlHandler = new UrlHandler();
module.exports = {
urlHandler: urlHandler
};
然后在你的主應用程序中,我們將監聽器設置為'processed:' + urls.length
這樣一旦完成所有異步請求,它就會觸發。
urls = ['http://stackoverflow.com/questions/12739605/how-to-perform-several-http-requests-with-node-js', 'http://stackoverflow.com'];
UrlHandler.getUrls(urls);
UrlHandler.once("processed:" + urls.length, function() {
return res.json(UrlHandler.urlResponse);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.