2017-03-24 7 views
1

Es gibt einen Node-Server gehostet und aus der Anwendung machen wir auch eine Anfrage an einige externe API über HTTP. Dieser externe Dienst kann 10 Anfragen/Sek. Verarbeiten. Anwendung ist hinter Nginx, die 30 Sekunden Timeout hat. Jetzt sagen wir, wir laden Last von 10k Anfrage auf Nodejs App Server. Da wir eine Abhängigkeit von externen API haben, die max 10 * 30 Anfrage in 30 Sekunden verarbeiten kann. Nur 300 Anfragen werden bearbeitet und der Rest wird von Nginx beendet. Aber immer noch diese 10k Anfrage wurde in die Warteschlange https.globalAgent.requests eingereiht und läuft weiter. Es gibt keine Möglichkeit, Sockettimeout anzugeben oder die Größe der Anforderungswarteschlange zu begrenzen. Ein weiterer Aufruf der Anwendung wird schließlich für den externen Dienst in die Warteschlange gestellt und später von Nginx beendet.NodeJs: Wenn maxsockets auf 10 begrenzt sind, wie die Anforderungswarteschlange in globalAgent zu beschränken

So Fragen sind: Gibt es eine Möglichkeit wir socketTimeOut einstellen kann? Gibt es eine Möglichkeit, die Größe der Warteschlange zu begrenzen ?. Problemumgehung?

Beispielcode

var http = require('http'); 
var https = require('https'); 
var Q = require('q'); 
var file = require('fs'); 
var request = require('request'); 
http.globalAgent.maxSockets = 10; 
https.globalAgent.maxSockets = 10; 
https.globalAgent.keepAlive=true; 


http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 

    var st = new Date(); 
    var rr = request(
     {url:'https://amazon.com',timeout:100000,time:true}, 
     function(err,resp,body){ 
      var et = new Date(); 
      // console.log(resp && resp.timings.socket,st-et,err); 
      console.log(https.globalAgent) 
      res.end('ok'); 
     } 
    ); 


}).listen(9898); 

Antwort

Verwandte Themen