Interruption de l'exécution d'une routine Go (*TCPListener) Accepter
Lors de la création d'un serveur TCP dans Go, vous pouvez rencontrer le défi de gracieusement arrêter le serveur et interrompre la fonction de gestion des goroutines (*TCPListener) Accepter.
Dans Go, func (*TCPListener) Accepter bloque l'exécution jusqu'à ce qu'une connexion soit reçue. Pour interrompre cette goroutine, vous devez :
Fermer le net.Listener :
La clé pour interrompre la goroutine Accepter est de fermer le net.Listener obtenu à partir du net. Écouter(...). En fermant l'écouteur, vous signalez au système d'exploitation qu'aucune connexion ne sera reçue, provoquant la fermeture de la goroutine Accepter.
Retour de la goroutine :
Après la fermeture l'auditeur, assurez-vous que votre goroutine revienne. Si la goroutine a du code après l'appel Accept, elle continuera à s'exécuter et peut provoquer un comportement ou des erreurs involontaires.
Exemple de code :
package main
import (
"fmt"
"net"
)
func main() {
ln, err := net.Listen("tcp", ":8080")
if err != nil {
// Handle error
}
go func() {
for {
conn, err := ln.Accept()
if err != nil {
if err == net.ErrClosed {
return // Listener was closed
}
// Handle other errors
}
// Handle connection
conn.Close()
}
}()
fmt.Println("Press enter to stop...")
var input string
fmt.Scanln(&input)
ln.Close() // Close the listener, interrupting the Accept loop
}
Ce code crée un TCPListener sur le port 8080 et lance une goroutine qui gère les connexions entrantes dans une boucle infinie. Lorsque l'utilisateur appuie sur Entrée, le programme ferme l'écouteur et interrompt l'appel bloquant Accept, provoquant le retour de la goroutine.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3