Maison  >  Article  >  interface Web  >  délai d'expiration de la requête http nodejs

délai d'expiration de la requête http nodejs

王林
王林original
2023-05-16 21:21:061984parcourir

Node.js est un runtime JavaScript open source qui permet de créer des applications Web efficaces côté serveur. Il fournit un moyen léger et efficace de gérer les requêtes et les réponses HTTP. Mais parfois, nous constatons qu'un message d'erreur « délai d'expiration de la demande » apparaît lors de l'exécution d'une requête HTTP. Cela peut se produire dans un environnement où la connexion réseau n'est pas suffisamment stable ou où la réponse du serveur est trop lente. Cet article explique comment résoudre le problème du délai d'expiration des requêtes HTTP dans Node.js.

1. Requêtes HTTP dans Node.js
Pour effectuer des requêtes HTTP dans Node.js, vous devez utiliser le module HTTP intégré. Le module HTTP fournit un certain nombre de méthodes et de propriétés qui peuvent être utilisées pour gérer les requêtes et les réponses HTTP. Vous trouverez ci-dessous un exemple de requête HTTP GET simple.

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();

Dans l'exemple ci-dessus, nous avons utilisé la méthode http.request() pour créer une requête HTTP. Cette méthode accepte un objet d'options comme paramètre, contenant des informations telles que le nom d'hôte, le port, le chemin et la méthode de requête. L'objet options peut également définir un attribut de délai d'attente, utilisé pour spécifier le délai d'expiration maximum de la demande (en millisecondes).

2. Traitement du délai d'expiration des requêtes HTTP
Lors de l'utilisation de Node.js pour effectuer des requêtes HTTP, un problème courant est le délai d'expiration des requêtes. La demande n'a pas abouti après le délai spécifié, probablement en raison d'une connexion réseau instable ou d'une réponse lente du serveur. Si les délais d'attente des requêtes ne sont pas gérés, cela peut entraîner le blocage de l'application, entraînant une mauvaise expérience utilisateur.

Pour résoudre le problème du délai d'expiration des requêtes, Node.js fournit un événement timeout, qui peut être utilisé pour définir le délai d'expiration des requêtes. Vous pouvez ajouter un gestionnaire d'événements de délai d'attente pour détecter si la demande expire. Si le délai expire, vous pouvez mettre fin à la demande et effectuer les actions appropriées. Vous trouverez ci-dessous un exemple de gestion du délai d'expiration des requêtes HTTP.

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();

Dans l'exemple ci-dessus, nous avons ajouté une propriété appelée timeout dans l'objet options, qui est utilisée pour définir le délai d'expiration de la requête à 5 secondes. Lorsque la requête expire, l'événement timeout de req sera déclenché et la méthode abort() sera appelée pour mettre fin à la requête. Ici, nous imprimons simplement le message d'erreur du délai d'expiration de la demande, et vous pouvez gérer le message d'erreur en fonction de vos besoins.

3. Comment fonctionne le timeout
Grâce au code dans l'exemple ci-dessus, vous pouvez voir que nous définissons l'événement timeout, mais il ne sera pas nécessairement déclenché après 5 secondes, car l'événement timeout est déclenché 5 secondes après la fin de la demande. . Le délai d'expiration de la requête HTTP est déterminé par la somme du délai d'expiration de la connexion TCP et du délai d'expiration de la lecture.

Le délai d'expiration de la connexion TCP fait référence au temps nécessaire au serveur pour accepter une demande et envoyer une réponse. Si nécessaire, la durée du délai d'attente peut être définie dans l'attribut socket de l'objet options, par exemple, définie sur 3000 :

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

Le délai d'attente de lecture fait référence au temps nécessaire à la transmission des données de réponse. Si nécessaire, la durée du délai de lecture peut également être définie dans l'objet options, par exemple sur 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 })
};

Dans les applications réelles, le délai d'expiration de la connexion TCP et le délai d'attente doivent être définis en fonction du temps de réponse du serveur et la stabilité de la connexion réseau. Lire le délai d'attente pour éviter les erreurs causées par le délai d'attente de la demande.

4. Conclusion
L'exécution de requêtes HTTP dans Node.js peut rencontrer des problèmes de délai d'expiration des requêtes. Pour résoudre de tels problèmes, nous pouvons utiliser le module HTTP intégré de Node.js pour définir un événement de délai d'attente pour la requête, mettre fin à la requête et gérer le message d'erreur. La durée du délai d'expiration de la connexion TCP et du délai de lecture dépend du temps de réponse du serveur et de la stabilité de la connexion réseau. Par conséquent, nous devons définir un délai d'attente raisonnable pour le temps de réponse du serveur et la stabilité de la connexion réseau.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Nodejs est-il courant ?Article suivant:Nodejs est-il courant ?