我需要执行多个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
我实际上正在考虑这一点,但认为这会很混乱。我会试试看。 –