簡體   English   中英

從node.js向apache2.2.21發送請求

[英]Sending request from node.js to apache2.2.21

我對節點服務器的每個請求多次調用函數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函數同時啟動的連接太多。

因此,您可以通過在另一個的回調中調用一個請求來執行這些請求,而在上一個請求的回調中調用下一個請求,但是由於有很多請求並且出於審美原因,我建議使用async -太棒了在處理這樣的事情時非常方便。

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.waterfall

我更新了腳本並為此使用了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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM