Heim > Web-Frontend > Front-End-Fragen und Antworten > Zeitüberschreitung bei der http-Anfrage von nodejs

Zeitüberschreitung bei der http-Anfrage von nodejs

王林
Freigeben: 2023-05-16 21:21:06
Original
2067 Leute haben es durchsucht

Node.js ist eine Open-Source-JavaScript-Laufzeitumgebung, die die Erstellung effizienter Webanwendungen auf der Serverseite ermöglicht. Es bietet eine einfache und effiziente Möglichkeit, HTTP-Anfragen und -Antworten zu verarbeiten. Manchmal kommt es jedoch vor, dass bei einer HTTP-Anfrage die Fehlermeldung „Request Timeout“ erscheint. Dies kann in einer Umgebung auftreten, in der die Netzwerkverbindung nicht stabil genug ist oder die Serverantwort zu langsam ist. In diesem Artikel wird erläutert, wie das Problem des Zeitlimits für HTTP-Anfragen in Node.js gelöst werden kann.

1. HTTP-Anfragen in Node.js
Um HTTP-Anfragen in Node.js zu stellen, müssen Sie das integrierte HTTP-Modul verwenden. Das HTTP-Modul stellt eine Reihe von Methoden und Eigenschaften bereit, die zur Verarbeitung von HTTP-Anfragen und -Antworten verwendet werden können. Unten finden Sie ein Beispiel für eine einfache HTTP-GET-Anfrage.

const http = require('http');

const options = {
  host: 'www.example.com',
  path: '/resource',
  port: 80,
  method: 'GET'
};

const req = http.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`);
    
  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.end();
Nach dem Login kopieren

Im obigen Beispiel haben wir die Methode http.request() verwendet, um eine HTTP-Anfrage zu erstellen. Diese Methode akzeptiert ein Optionsobjekt als Parameter, das Informationen wie Hostnamen, Port, Pfad und Anforderungsmethode enthält. Das Optionsobjekt kann auch ein Timeout-Attribut festlegen, das zur Angabe des maximalen Timeouts für die Anfrage (in Millisekunden) verwendet wird.

2. Zeitüberschreitung bei der Verarbeitung von HTTP-Anfragen
Bei der Verwendung von Node.js zum Senden von HTTP-Anfragen tritt ein häufiges Problem auf. Die Anfrage wurde nach mehr als der angegebenen Zeit nicht abgeschlossen, möglicherweise aufgrund einer instabilen Netzwerkverbindung oder einer langsamen Serverantwort. Wenn Anforderungszeitüberschreitungen nicht berücksichtigt werden, kann dies zu einer Verstopfung der Anwendung führen, was zu einer schlechten Benutzererfahrung führt.

Um das Problem des Anforderungs-Timeouts zu lösen, stellt Node.js ein Timeout-Ereignis bereit, mit dem das Zeitlimit für das Anforderungs-Timeout festgelegt werden kann. Sie können einen Timeout-Ereignishandler hinzufügen, um zu erkennen, ob bei der Anfrage eine Zeitüberschreitung auftritt. Bei einer Zeitüberschreitung können Sie die Anfrage beenden und entsprechende Aktionen durchführen. Nachfolgend finden Sie ein Beispiel für die Behandlung von Zeitüberschreitungen bei HTTP-Anfragen.

const http = require('http');

const options = {
  host: 'www.example.com',
  path: '/resource',
  port: 80,
  method: 'GET',
  timeout: 5000 // 设置超时时间为5秒钟
};

const req = http.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`);

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('timeout', () => {
  req.abort();
});

req.on('error', (error) => {
  console.error(error);
});

req.end();
Nach dem Login kopieren

Im obigen Beispiel haben wir eine Eigenschaft namens timeout im Optionsobjekt hinzugefügt, die verwendet wird, um das Anfrage-Timeout auf 5 Sekunden festzulegen. Wenn die Anforderung abläuft, wird das Timeout-Ereignis von req ausgelöst und die Methode abort() aufgerufen, um die Anforderung zu beenden. Hier drucken wir einfach die Fehlermeldung des Anforderungszeitlimits aus, und Sie können die Fehlermeldung entsprechend Ihren Anforderungen bearbeiten.

3. Wie Timeout funktioniert
Anhand des Codes im obigen Beispiel können Sie sehen, dass wir das Timeout-Ereignis festlegen, es wird jedoch nicht unbedingt nach 5 Sekunden ausgelöst, da das Timeout-Ereignis 5 Sekunden nach Abschluss der Anforderung ausgelöst wird . . Das HTTP-Anfrage-Timeout wird durch die Summe des TCP-Verbindungs-Timeouts und des Lese-Timeouts bestimmt.

TCP-Verbindungszeitlimit bezieht sich darauf, wie lange es dauert, bis der Server eine Anfrage akzeptiert und eine Antwort sendet. Bei Bedarf kann die Länge des Timeouts im Socket-Attribut im Optionsobjekt eingestellt werden, beispielsweise auf 3000:

const options = {
  host: 'www.example.com',
  path: '/resource',
  port: 80,
  method: 'GET',
  timeout: 5000,
  socket: {
    connectTimeout: 3000
  }
};
Nach dem Login kopieren

Read Timeout bezieht sich darauf, wie lange es dauert, bis Antwortdaten übertragen werden. Bei Bedarf kann die Länge des Lese-Timeouts auch im Optionsobjekt festgelegt werden, beispielsweise auf 2000:

const options = {
  host: 'www.example.com',
  path: '/resource',
  port: 80,
  method: 'GET',
  timeout: 5000,
  timeout: 5000,
  socket: {
    connectTimeout: 3000
  },
  headers: {
    'Keep-Alive': true,
    'Connection': 'keep-alive'
  },
  agent: new http.Agent({ keepAlive: true })
};
Nach dem Login kopieren

In tatsächlichen Anwendungen müssen das TCP-Verbindungs-Timeout und das Timeout entsprechend der Antwortzeit des festgelegt werden Server und die Stabilität der Netzwerkverbindung, um Fehler durch Anforderungs-Timeout zu vermeiden.

4. Fazit
Beim Ausführen von HTTP-Anfragen in Node.js kann es zu Problemen mit der Zeitüberschreitung der Anfrage kommen. Um solche Probleme zu lösen, können wir das integrierte HTTP-Modul von Node.js verwenden, um ein Timeout-Ereignis für die Anfrage festzulegen, die Anfrage zu beenden und die Fehlermeldung zu verarbeiten. Die Länge des TCP-Verbindungs-Timeouts und des Lese-Timeouts hängt von der Antwortzeit des Servers und der Stabilität der Netzwerkverbindung ab. Daher müssen wir eine angemessene Zeitüberschreitung für die Antwortzeit des Servers und die Stabilität der Netzwerkverbindung festlegen.

Das obige ist der detaillierte Inhalt vonZeitüberschreitung bei der http-Anfrage von nodejs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage