2014-10-21 18 views
9

Quando si tratta di timeout HTTP richieste, sembra che node.js ha tre timeout distinte:differenza tra node.js HTTP Server, Request, Response e timeout

  1. server.setTimeout http://nodejs.org/api/http.html#http_server_settimeout_msecs_callback
  2. richiesta .setTimeout http://nodejs.org/api/http.html#http_request_settimeout_timeout_callback
  3. response.setTimeout http://nodejs.org/api/http.html#http_response_settimeout_msecs_callback

qualcuno può chiarire quale sia la differenza tra ciascuno di questi metodi e wh qualcuno vorrebbe usare ognuno di loro?

risposta

13
  1. Si sta eseguendo un server Web nell'app node.js. Determina per quanto tempo il nodo lascerà aperta una connessione di richiesta client senza traffico prima di chiuderla a causa del timeout di inattività. Un esempio è che un utente perde potenza in casa mentre scarica un file di grandi dimensioni dalla tua app. Si imposta questa volta e si applicherà a tutte le connessioni client ricevute dal server.
  2. Questo è per le richieste in uscita dal programma del nodo a un server Web remoto. Quindi scrivi un raschietto per scaricare un file e la tua connessione Internet muore durante il download. Questo determina quando il nodo alla fine si arrende in attesa di dati dal lato remoto. Ciò influenzerà solo una richiesta specifica in quanto la connessione TCP sottostante verrà chiusa e ciascuna richiesta in uscita otterrà una connessione TCP distinta.
  3. Poiché la richiesta HTTP e la risposta corrispondente avvengono tramite lo stesso socket TCP sottostante, la mia comprensione è req.setTimeout e res.setTimeout, in ultima analisi si traduce nella stessa chiamata di sistema sottostante che imposta il timeout sul socket TCP stesso utilizzando le corrispondenti chiamate libuv/os. Quindi penso che entrambi siano equivalenti e puoi decidere quale sia più conveniente o se ti senti semanticamente più chiaro. Potrei sbagliarmi su questo però quindi se qualcun altro lo sa per certo sentitevi libero di correggermi.

Generalmente i valori predefiniti sono ragionevoli. Tuttavia, potresti volerli impostare più a lungo se sapessi di avere molti clienti con connessioni molto lente o "flakey" (servi i telefoni cellulari in aree remote o satelliti o qualsiasi altra cosa), e le connessioni che erano in realtà ancora valide essendo state chiuse a causa di tempo scaduto. Potresti impostarli più breve se sapessi che i tuoi client erano ben collegati (come i server nello stesso datacenter) e volevi liberare risorse in modo più aggressivo.

+0

Grazie! Mi piacerebbe avere qualche idea sul # 3 e farò dei test per vedere se riesco a capire se c'è una differenza –

Problemi correlati