我正在研究GitHub上名为机器人托管的项目。我的项目的工作是从xml配置文件中提供的url中获取媒体。并且xml配置文件具有已定义的格式,就像在脚本目录中看到的那样。
我的问题如下。有两个参数:
简化示例如下:
node_list = {..., next = {..., next= null}};
url_arr = [urls];
我想迭代url arr中的所有项目,所以我按以下方式执行:
function fetch(url, node) {
if(node == null)
return ;
// here do something with http request
var req = http.get('www.google.com', function(res){
var data = '';
res.on('data', function(chunk) {
data += chunk;
}.on('end', function() {
// maybe here generate more new urls
// get another url_list
node = node.next;
fetch(url_new, node);
}
}
// here need to be run in sync
for (url in url_arr) {
fetch(url, node)
}
如您所见,如果使用异步http请求,它必须占用所有系统资源。我无法控制这个过程。 那么有人有个好主意来解决这个问题吗? 或者,nodejs不是执行此类工作的正确方法吗?
答案 0 :(得分:1)
如果问题是您同时收到太多HTTP请求,则可以更改fetch
函数以对一堆URL进行操作。
基本上你会这样做:
fetch
时,将URL插入堆栈并检查请求是否正在进行中:这样你就可以让for-loop像现在一样添加所有的URL,但是一次只处理一个URL,所以不会使用太多的资源。