2013-02-21 14 views
7

ho connettersi ad altri siti web nella mia app node.js utilizzando il modulo di richiesta in maniera molto standard:Node.js app inizia timeout (ETIMEDOUT) quando HTTP collegamento ad altri siti dopo essere stato in esecuzione per un certo tempo

Network.prototype.httpRequest = function(url, method, params, headers, callback) 
{ 
    var qs = typeof params === 'string' ? params : querystring.stringify(params || {}), 
     config = { 
      'method': (method || 'get').toUpperCase(), 
      'url': url, 
      'timeout': this.app.api.settings.http.timeout_outbound 
     }; 
    if(config.method === 'GET') 
    { 
     config.url += '?' + qs; 
    } 
    else 
    { 
     config.body = qs; 
    } 

    request(config, callback); 
}; 

Dopo alcune ore in cui la mia app è attiva, questa funzione inizia a scadere, e non solo per un sito web. Inizia a non riuscire a connettersi (ETIMEDOUT) in modo casuale, senza alcun modello distinguibile.

La mia prima, ovvia ipotesi è che qualcosa deve in qualche modo bloccare/interferire con le connessioni di rete. Ci sono molte altre "parti mobili" nella mia app (ad esempio, collegarsi a Mongo tramite Mongoose, collegarsi a ElasticSearch via Elastical, ecc.), Quindi è probabilmente concepibile che una di esse sia la causa ... ma ovviamente, è non è un'opzione sedersi attorno disabilitando selettivamente altri moduli e aspettando 6 ore per vedere se il problema scompare ...

Sto monitorando il traffico di rete (tramite iStatMenus pro su OSX, FWIW) e non vedo alcun inusuale/traffico persistente proveniente dal nodo.

C'è qualche altro modo di approfondire ciò che potrebbe bloccare/interferire con il mio traffico?

+1

hai risolto il problema? ho lo stesso problema ... – hereandnow78

+1

Sono anche interessato alla soluzione ... – rshmelev

+1

Ho anche lo stesso problema. Puoi dirci quale soluzione l'ha risolta? –

risposta

0

Hai provato a provare setting keep-alive? Sembra che la connessione stia scadendo (perché hai impostato in modo esplicito un timeout) quando non ci sono dati ricevuti. Mi sono imbattuto in un problema simile durante la creazione di una soluzione server/client socket e questa era la soluzione.

(inoltre, potrei aver frainteso la domanda)

+2

Io altamente, dubito fortemente che questo è il problema, dato che l'app funziona bene per diverse ore, e nulla sta cambiando riguardo le condizioni in cui è in esecuzione, tranne il tempo che ha stato in esecuzione. Più in particolare, la domanda è: perché non riceverebbe i dati? Questo è il problema. Non dovrebbe accadere, specialmente non con regolarità. –