NodeJS async file d'attente trop vite (Ralentissement async file d'attente de la méthode)

J'ai une requête HTTP Get et je veux analyser la réponse et l'enregistrer dans ma base de données.

Si je l'appelle d'analyse(i) independentely-je obtenir de bons résultats. Mais je suis d'appel d'analyse (le), de 1 à 2000.
J'obtiens de bons résultats, mais certaines réponses semblent se perdre et certaines réponses sont des doublons. Je ne pense pas que je comprends comment appeler des milliers de fonctions asynchrones. Je suis l'aide de la async module file d'attente de la fonction, mais jusqu'à présent, je suis toujours en manque quelques données et ont encore quelques doublons. Ce que je fais mal? Merci pour votre aide.

Ce que je suis en rampant

Mon nœud fonctions :

 function getOptions(i) {
    return {
        host: 'magicseaweed.com',
        path: '/syndicate/rss/index.php?id='+i+'&unit=uk',
        method: 'GET'
    }
};

function crawl(i){
var req = http.request(getOptions(i), function(res) {
    res.on('data', function (body) {
        parseLocation(body);
    });
});
req.end();

}

function parseLocation(body){
    parser.parseString(body, function(err, result) {
        if(result && typeof result.rss != 'undefined') {
            var locationTitle = result.rss.channel[0].title;
            var locationString = result.rss.channel[0].item[0].link[0];
            var location = new Location({
                id: locationString.split('/')[2],
                name: locationTitle
            });
            location.save();
        }
    });
  }

N = 2 //# of simultaneous tasks
var q = async.queue(function (task, callback) {
        crawl(task.url);
        callback();
}, N);


q.drain = function() {
    console.log('Crawling done.');
}

for(var i = 0; i < 100; i++){
   q.push({url: 'http://magicseaweed.com/syndicate/rss/index.php?id='+i+'&unit=uk'});
}

[EDIT] bon, après beaucoup de tests, il semble que le service que je suis ramper ne peut pas supporter autant de demande que rapide. Parce que quand je le fais chaque demande de manière séquentielle, je puisse obtenir tous les bonnes réponses.

Est-il un moyen de RALENTIR ASYNC file d'attente méthode?

Il semble que beaucoup de demandes sont défaillants maintenant... Comment puis-je assurer la demande de ne pas échouer?
Avez-vous essayez d'utiliser setTimeOut pour retarder le callback() appel dans votre file d'attente de travailleurs de la fonction? Vous pouvez ralentir l'exécution des tâches dans la file d'attente de cette façon.

OriginalL'auteur William Fortin | 2013-01-16