Maison >développement back-end >Golang >Comment puis-je arrêter progressivement un serveur Go et éviter les erreurs « Utilisation d'une connexion réseau fermée » ?
Dans Go, l'arrêt progressif d'un serveur en écoute est essentiel pour éviter une interruption brutale et une perte potentielle de données . L'un des défis consiste à discerner l'erreur spécifique qui indique que l'écouteur a été fermé, car elle n'est pas explicitement exportée dans la bibliothèque standard.
Pour résoudre ce problème, nous pouvons exploiter le canal terminé pour signaler l'arrêt imminent du serveur.
La fonction serve() modifiée gère désormais les erreurs différemment :
func (es *EchoServer) serve() { for { conn, err := es.listen.Accept() if err != nil { select { case <-es.done: // If we called stop() then there will be a value in es.done, so // we'll get here and we can exit without showing the error. default: log.Printf("Accept failed: %v", err) } return } go es.respond(conn.(*net.TCPConn)) } }
La méthode stop() modifiée envoie désormais un signal au canal terminé avant de fermer l'écouteur :
// Stop the server by closing the listening listen func (es *EchoServer) stop() { es.done <- true // We can advance past this because we gave it a buffer of 1 es.listen.Close() // Now the Accept will have an error above }
Cette approche offre une manière améliorée et gracieuse de gérer l'arrêt du serveur dans Go. En utilisant le canal terminé, nous pouvons empêcher l'affichage de messages d'erreur indésirables tout en gardant le contrôle sur la terminaison du serveur.
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!