Wie lege ich eine Zeitüberschreitung für Client-HTTP-Verbindungen in node.js fest

8

Ich schreibe eine node.js-Anwendung, die mit einem Server kommunizieren muss. Es stellt eine HTTP-Verbindung mit dem folgenden Code her:

%Vor%

Ich sehe in der Dokumentation von node.js keine Option zum Festlegen eines Zeitlimits für die Verbindung, und es scheint standardmäßig auf 20 Sekunden eingestellt zu sein. Das Problem, das ich habe, ist, dass ich in China Nutzer habe, die ein langsames oder flockiges Netzwerk zu sein scheinen, die manchmal die Timeout-Verbindung zu unserem Rechenzentrum in den USA getroffen haben. Ich möchte das Timeout auf 1 Minute erhöhen, um zu sehen, ob es das für sie behebt.

Gibt es eine Möglichkeit, das in node.js zu tun?

    
Dan List 27.08.2010, 17:35
quelle

4 Antworten

6

Versuchen Sie

  

request.socket.setTimeout (60000); // 60 Sekunden

    
Matjaz Lipus 01.10.2010 07:46
quelle
4

Ich denke, Sie können etwas tun wie:

%Vor%

request.connection gibt das net.Stream-Objekt zurück, das der Verbindung zugeordnet ist. und net.Stream hat eine setTimeout-Methode.

    
Toby Hede 28.08.2010 00:30
quelle
1

Sie müssen warten, bis die Verbindung zum Client-Socket hergestellt ist, bevor Sie das Zeitlimit setzen. Fügen Sie dazu einen Rückruf für das Ereignis "Socket" hinzu:

%Vor%

Siehe diese Antwort .

    
Pavel 09.03.2014 07:48
quelle
1

Es gibt keine Möglichkeit, das Zeitlimit für den Knoten auf erhöhen zu erhöhen. Da in der Regel Verbindung Timeout (dh Verbindungsaufbau Timeout) ist OS-weite Einstellung für alle Anwendungen (zB 21 Sekunden in Windows , von 20 bis 120 Sekunden in Linux ). Siehe auch Timouts in Request-Paket .

Im Gegensatz dazu erlaubt Node, eine verringerte Zeitüberschreitung zu setzen und die Verbindung abzubrechen, selbst wenn die Verbindung noch nicht hergestellt ist.

Die weiteren Timeouts (falls eine Verbindung hergestellt wurde) können gemäß der Dokumentation gesteuert werden (siehe request.setTimeout , socket.setTimeout ).

    
ruvim 20.12.2014 20:11
quelle

Tags und Links