2014-10-21 11 views
9

Wenn es um Timing aus HTTP-Anforderungen kommt, ist es wie node.js sieht verfügt über drei separate Timeouts:Unterschied zwischen node.js HTTP Server, Anforderung und Antwort Timeouts

  1. server.setTimeout http://nodejs.org/api/http.html#http_server_settimeout_msecs_callback
  2. Anfrage .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

Kann mir jemand erklären, was der Unterschied zwischen jedem dieser Verfahren ist und wh Wer möchte sie benutzen?

Antwort

13
  1. Sie betreiben einen Webserver in Ihrer node.js App. Dies legt fest, wie lange der Knoten eine Clientanforderungsverbindung ohne Datenverkehr geöffnet lassen wird, bevor er aufgrund von Leerlaufzeitüberschreitung geschlossen wird. Ein Beispiel ist ein Benutzer verliert die Macht in ihrem Haus beim Herunterladen einer großen Datei von Ihrer App. Sie legen dies einmal fest und es gilt für alle Clientverbindungen, die Ihr Server empfängt.
  2. Dies ist für ausgehende Anfragen von Ihrem Knotenprogramm an einen Remote-Webserver. Also schreibst du einen Scraper, um eine Datei herunterzuladen und deine Internetverbindung stirbt beim Herunterladen. Dies bestimmt, wann der Knoten schließlich auf das Warten auf Daten von der entfernten Seite verzichtet. Dies wirkt sich nur auf eine bestimmte Anfrage aus, da die zugrunde liegende TCP-Verbindung geschlossen wird und jede ausgehende Anfrage eine eindeutige TCP-Verbindung erhält.
  3. Da die HTTP-Anfrage und entsprechende Antwort über den gleichen zugrunde liegenden TCP-Socket auftreten, ist mein Verständnis und res.setTimeout letztlich im gleichen zugrunde liegenden Systemaufruf, der die Zeitüberschreitung auf dem TCP-Socket selbst mit den entsprechenden libuv/os Anrufe setzt. Also ich denke beide sind gleichwertig und du kannst dir was auch immer bequemer oder was auch immer man semantischer für dich empfindet. Ich könnte mich deswegen irren, also wenn jemand anders es sicher weiß, fühle ich mich frei, mich zu korrigieren.

Im Allgemeinen sind die Standardeinstellungen angemessen. Vielleicht möchten Sie diese jedoch länger einstellen, wenn Sie wüssten, dass Sie sehr viele Clients bei sehr langsamen oder unklaren Verbindungen haben (Sie bedienen Mobiltelefone in entlegenen Gebieten oder Satelliten oder was auch immer) und Verbindungen, die tatsächlich noch lebensfähig sind, weil wir geschlossen sind Auszeit. Sie könnten sie kürzer festlegen, wenn Sie wissen, dass Ihre Clients gut verbunden sind (wie Server im selben Datencenter) und Sie Ressourcen aggressiver freigeben möchten.

+0

Danke! Ich würde jeden Einblick in # 3 lieben und einige Tests durchführen, um zu sehen, ob ich herausfinden kann, ob es einen Unterschied gibt –

Verwandte Themen