fonction de fermeture du serveur nodejs
Avec le développement et l'application continus de la technologie Node.js, l'application de création de serveurs Web devient de plus en plus répandue. Lors du processus de développement, nous rencontrons souvent une exigence : arrêter le serveur. Alors, comment arrêter le serveur avec précision et élégance dans une application Node.js ? Cet article explique comment utiliser Node.js pour créer une application capable d'arrêter le serveur en douceur.
1. Démarrage et arrêt du serveur Node.js
Dans Node.js, le démarrage du serveur est très simple. Il vous suffit d'utiliser le module http intégré pour terminer. Par exemple :
const http = require('http'); const server = http.createServer((req, res) => { res.end('Hello World!'); }); server.listen(3000, () => { console.log('Server is running on port 3000'); });
Le code ci-dessus crée un serveur HTTP et le lie au port 3000. Bien entendu, vous pouvez également utiliser des frameworks tels qu'Express pour créer des serveurs Web. Mais quel que soit le framework utilisé, la méthode d’arrêt du serveur est fondamentalement la même.
Lorsque nous devons arrêter le serveur, nous pouvons utiliser l'une des deux méthodes suivantes.
1. Utilisez Ctrl + C pour forcer la fin du processus
Lorsque nous démarrons l'application Node.js à l'aide de la ligne de commande, nous pouvons terminer le processus en appuyant sur la combinaison de touches Ctrl + C. Cette méthode est simple et rapide, mais elle n’est pas élégante et n’effectue pas certains travaux de nettoyage nécessaires, ce qui peut poser certains problèmes.
2. Arrêtez le serveur en écoutant le signal SIGINT
Dans Node.js, vous pouvez écouter l'événement de signal et effectuer certaines opérations lorsque l'événement se produit. Nous pouvons arrêter le serveur en douceur en écoutant l'événement de signal SIGINT et en effectuant certaines opérations nécessaires, telles que la libération de ressources, la sauvegarde de l'état, etc. Voici un exemple de code :
const http = require('http'); const server = http.createServer((req, res) => { res.end('Hello World!'); }); server.listen(3000, () => { console.log('Server is running on port 3000'); }); process.on('SIGINT', () => { console.log('Received SIGINT signal, shutting down server...'); server.close(() => { console.log('Server has been shut down.'); process.exit(); }); });
Dans le code ci-dessus, nous écoutons le signal SIGINT via l'objet de processus. Lorsque le signal est déclenché, les informations du journal sont générées et le serveur Web est arrêté correctement. La méthode server.close() dans le code peut arrêter le serveur et exécuter la fonction de rappel une fois toutes les connexions déconnectées. Dans la fonction de rappel, nous affichons les informations sur l'arrêt du serveur et utilisons la méthode process.exit() pour quitter le processus.
Il est à noter qu'en utilisation réelle, nous pourrons être amenés à effectuer certaines opérations supplémentaires, comme la sauvegarde de l'état dans la base de données, l'envoi d'e-mails de notification, etc. Ces opérations peuvent être placées dans une fonction de rappel pour garantir qu'elles sont exécutées lorsque le serveur est arrêté.
2. Arrêt progressif du serveur Node.js
Dans l'exemple ci-dessus, nous avons terminé le processus de base d'arrêt du serveur. Cependant, dans les applications réelles, certaines optimisations peuvent être nécessaires pour garantir un arrêt plus progressif du serveur.
1. Délai d'attente pour le traitement des demandes
Lorsque le serveur Web traite une demande, si la demande prend trop de temps, le serveur peut ne pas s'arrêter correctement. Par conséquent, avant d'arrêter le serveur, nous devons arrêter de traiter toutes les demandes ou définir un délai d'attente pour la demande afin de garantir que le traitement est terminé dans le délai imparti.
const http = require('http'); const server = http.createServer((req, res) => { res.end('Hello World!'); }); server.listen(3000, () => { console.log('Server is running on port 3000'); }); let connections = []; server.on('connection', (connection) => { connections.push(connection); connection.on('close', () => { const index = connections.indexOf(connection); if (index !== -1) { connections.splice(index, 1); } }); }); function closeConnections() { console.log('Closing all connections...'); connections.forEach((connection) => { connection.end(); }); setTimeout(() => { connections.forEach((connection) => { connection.destroy(); }); server.close(() => { console.log('Server has been shut down.'); process.exit(); }); }, 10000); } process.on('SIGINT', () => { console.log('Received SIGINT signal, shutting down server...'); closeConnections(); });
2. Gérer les demandes en attente
Lorsque le serveur Web traite une demande, cela peut impliquer plusieurs opérations, telles que la lecture de fichiers, l'interrogation de la base de données, etc. Si ces opérations ne sont pas terminées avant l'arrêt du serveur, cela peut entraîner une perte de données, une interruption de la connexion et d'autres problèmes. Par conséquent, avant d’arrêter le serveur, nous devons nous assurer que toutes les opérations sont terminées. Par exemple, utilisez Promise pour gérer la lecture de fichiers.
const http = require('http'); const fs = require('fs').promises; const server = http.createServer((req, res) => { fs.readFile('./index.html') .then((data) => { res.end(data); }) .catch((err) => { console.error(err); res.statusCode = 500; res.end('Internal server error'); }); }); server.listen(3000, () => { console.log('Server is running on port 3000'); }); let connections = []; server.on('connection', (connection) => { connections.push(connection); connection.on('close', () => { const index = connections.indexOf(connection); if (index !== -1) { connections.splice(index, 1); } }); }); function closeConnections() { console.log('Closing all connections...'); connections.forEach((connection) => { connection.end(); }); setTimeout(() => { connections.forEach((connection) => { connection.destroy(); }); server.close(() => { console.log('Server has been shut down.'); process.exit(); }); }, 10000); } process.on('SIGINT', () => { console.log('Received SIGINT signal, shutting down server...'); // 进行必要的清理工作 console.log('Cleaning up...'); fs.unlink('./index.html') .then(() => { console.log('File has been deleted.'); }) .catch((err) => { console.error(err); }); // 关闭所有连接 closeConnections(); });
Dans le code ci-dessus, nous utilisons Promise pour lire le fichier afin de nous assurer que le fichier a été correctement supprimé avant de fermer le serveur. Avant d'arrêter le serveur, nous avons également fermé toutes les connexions et fermé de force toutes les connexions ainsi que le serveur après 10 secondes. En utilisation réelle, différents délais d'attente peuvent être définis selon les besoins.
3. Résumé
Dans les applications Node.js, l'arrêt du serveur Web est une exigence courante. Cet article décrit comment utiliser le module http intégré pour créer un serveur Web et arrêter le serveur en douceur en écoutant le signal SIGINT. Dans le même temps, nous avons également présenté comment optimiser le processus d'arrêt du serveur pour garantir que le serveur puisse s'arrêter correctement dans diverses circonstances. Dans les applications réelles, il peut être étendu et optimisé de manière appropriée selon les besoins pour répondre à différents besoins.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'article traite de l'utilisation Effecte dans React, un crochet pour gérer les effets secondaires comme la récupération des données et la manipulation DOM dans les composants fonctionnels. Il explique l'utilisation, les effets secondaires courants et le nettoyage pour éviter des problèmes comme les fuites de mémoire.

Le chargement paresseux retarde le chargement du contenu jusqu'à ce qu'il soit nécessaire, améliorant les performances du Web et l'expérience utilisateur en réduisant les temps de chargement initiaux et la charge du serveur.

L'article explique l'algorithme de réconciliation de React, qui met à jour efficacement le DOM en comparant les arbres DOM virtuels. Il traite des avantages de la performance, des techniques d'optimisation et des impacts sur l'expérience utilisateur. Compte de charge: 159

L'article traite du curry dans JavaScript, une technique transformant les fonctions mulguments en séquences de fonctions à argument unique. Il explore la mise en œuvre du currying, des avantages tels que des applications partielles et des utilisations pratiques, améliorant le code

Les fonctions d'ordre supérieur dans JavaScript améliorent la concision du code, la réutilisabilité, la modularité et les performances par abstraction, modèles communs et techniques d'optimisation.

L'article explique UseContext dans React, qui simplifie la gestion de l'État en évitant le forage des accessoires. Il traite des avantages tels que les améliorations centralisées de l'État et des performances grâce à des redevances réduites.

L'article discute de la connexion des composants React à Redux Store à l'aide de Connect (), expliquant MapStateToproprop, MapDispatchToprops et des impacts de performances.

L'article discute de la prévention des comportements par défaut dans les gestionnaires d'événements à l'aide de la méthode empêchée dedEfault (), de ses avantages tels que une expérience utilisateur améliorée et des problèmes potentiels tels que les problèmes d'accessibilité.
