Javascript 从node.js向apache2.2.21发送请求

Javascript 从node.js向apache2.2.21发送请求,javascript,node.js,apache,httprequest,http-request,Javascript,Node.js,Apache,Httprequest,Http Request,我对节点服务器的每个请求多次调用函数dorequest。 我对在apache2.2.21上运行的网页的请求有问题。几乎所有这些请求都没有任何问题,但是有几个请求以错误ECONNRESET结束,我不知道为什么。如果我使用apapche2.4,那么一切都会顺利进行 var request = require('request'); function dorequest(set, callback){ request.get(url, function optionalCallback(er

我对节点服务器的每个请求多次调用函数dorequest。 我对在apache2.2.21上运行的网页的请求有问题。几乎所有这些请求都没有任何问题,但是有几个请求以错误
ECONNRESET
结束,我不知道为什么。如果我使用apapche2.4,那么一切都会顺利进行

var request = require('request');

function dorequest(set, callback){
    request.get(url, function optionalCallback(err, httpResponse, body){
        if (err){
            console.log(url);
            throw err;
        } else {
            //do some stuffs 
        }
    });
}

可能您的apache服务器只是简单地删除了您的请求,因为同时有太多的连接由
dorequest
函数启动

因此,您可以通过调用另一个回调中的一个来执行这些请求,也可以调用前一个回调中的下一个请求,但是由于它们太多了,而且出于令人敬佩的原因,我建议您使用它——在处理类似的事情时,它非常棒而且非常方便

function dorequest(set, callback){
    request.get(url, function optionalCallback(err, httpResponse, body){
        if (err){
            callback(err);
        } else {
            //do some stuffs 
        }
        callback(err, res);
    });
}

var maxRequestAtATime = 30;

async.mapLimit(arrayOfOptions, maxRequestAtATime, dorequest, function(err, results){
    // results is now an array of stats for each request
});

如果请求的选项取决于前一个请求的选项,那么您应该使用
async.falter

我更新了脚本并使用async.queue函数,但在apache上仍然存在一些错误

    function dorequest(set, callback)
{
     console.log('add request');
    q.push({set: set, callback: callback}, function (err) { }); 
}

var q = async.queue(function (task, callback) {

    setTimeout(function () {
        console.log('hello ' + task.set.url, ' lenght: ',q.length());

        if (task.set.method=='get')
        {               
            myrequest.get(task.set.url, function optionalCallback(err, httpResponse, body) 
            {

                if (err)
                {
                    console.log(task.set.url);
                    throw err;
                }
                else
                {
                    //console.log(set.url,body);
                    if (typeof task.callback !='undefined') task.callback(body);
                    callback();
                }
            });
        }
        else
        {       
            if (!task.set.data) task.set.data={};       
            myrequest.post(task.set.url, function optionalCallback(err, httpResponse, body) 
            {

                if (err)
                {
                    console.log(task.set.url);
                    throw err;
                }
                else
                {
                    //console.log(set.url,body);
                    if (typeof task.callback !='undefined') task.callback(body);
                    callback();
                }
            }).form(task.set.data); 
        }       

    },500); 
},1);

也许您的apache服务器只是因为同时有太多由
dorequest
发起的连接而丢弃了您的请求?我知道这应该是个问题。如何解决此行为?我试图设置apache的许多设置,但没有任何进展。当我向apache2.4发出请求时,它是稳定的。是否可以在任何延迟的情况下帮助对请求进行排队?这很有意义。我试试看。非常感谢。