我需要執行多個http請求。我有一組網址,當每個請求完成時,JSON object
被推入一個數組中。當所有請求都完成時,JSON object
將被髮送到客戶端,新建Array
。如果我在做這個客戶端,我會使用jQuery
的Deferred對象。是否有另一種方法使用node.js
而不必import jQuery's Deferred object
?似乎事件發射器似乎不會被用來處理這個問題。或者會嗎?謝謝!如何使用node.js執行多個http請求
0
A
回答
2
確保您允許Node.js的多個連接第一
require('http').globalAgent.maxSockets = 1000
這段代碼可以讓你的Node.js服務器接受每個客戶端1000個的HTTP請求。
有許多流量控制在Node.js的圖書館
我個人更喜歡async
,因爲它的功能類似於underscore或lodash,但它的異步版本。
0
這裏是一個可能的解決方案。
此類擴展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);
});
相關問題
- 1. HTTP請求node.js使用mikeal的'請求'
- 2. 如何使用請求庫執行HTTP DELETE請求
- 3. 如何在node.js的循環(map或_.each)中執行多個http請求方法
- 4. 如何在PHP中並行執行多個HTTP請求?
- 5. 執行HTTP請求
- 6. Node.js http請求
- 7. 在Node.js中的單個HTTP請求中調用多個HTTP請求
- 8. 執行HTTP POST請求,然後執行HTTP GET請求
- 9. Node.js請求 - 執行順序
- 10. Android - 如何執行HTTP GET請求?
- 11. 如何區分使用express的Node.js中的HTTP請求和XML HTTP請求?
- 12. HTTP請求與Node.js
- 13. Node.js - 使用請求在for循環中發送多個HTTP GET
- 14. 執行HTTP請求時NetworkOnMainThreadException
- 15. 執行的請求網/ HTTP
- 16. Node.js - 使用Cookie的多個請求
- 17. Python:嘗試使用請求登錄並執行HTTP請求
- 18. 多個http請求
- 19. 使用node.js測量http請求時間
- 20. 如何使用cURL執行多個同時請求?
- 21. 如何使用量角器執行多個同時請求?
- 22. 如何在執行並完成n個HTTP請求的列表後執行HTTP請求
- 23. 使用PDO執行,並承諾爲多發的HTTP請求
- 24. 如何結束node.js http請求提前
- 25. 如何使用Android執行HTTP請求ndk
- 26. 如何使用單獨的線程執行http請求
- 27. C#:如何使用套接字執行HTTP請求?
- 28. Node.js請求 - 處理多個POST請求
- 29. 如何使用http請求
- 30. 使用Wininet發送多個Http請求
是的,事件發射器可以處理這個。我能想到的一個解決方案是在每個完成的請求之後發出一個事件,如event:processed_url_count。然後有一個監聽器,如event:total_url_count,它將觸發發送給包含所有請求的數組的客戶端。 – ace
我實際上正在考慮這一點,但認爲這會很混亂。我會試試看。 –