Interrumpir una rutina de Go en ejecución (*TCPListener) Aceptar
Al crear un servidor TCP en Go, puede encontrar el desafío de hacerlo con gracia cerrar el servidor e interrumpir la función de manejo de rutinas (*TCPListener) Aceptar.
En Go, la función (*TCPListener) Aceptar bloquea la ejecución hasta que se reciba una conexión. Para interrumpir esta rutina, debes:
Cerrar la red.Oyente:
La clave para interrumpir la rutina Aceptar es cerrar la red.El oyente se obtiene de la red. Escuchar(...). Al cerrar el oyente, le indica al sistema operativo que no se recibirán más conexiones, lo que provocará que se cierre la rutina Aceptar.
Regreso de la rutina Gor:
Después de cerrar el oyente, asegúrese de que su rutina regrese. Si la rutina tiene código después de la llamada Aceptar, continuará ejecutándose y puede provocar errores o comportamientos no deseados.
Código de ejemplo:
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
}
Este código crea un TCPListener en el puerto 8080 e inicia una rutina que maneja las conexiones entrantes en un bucle infinito. Cuando el usuario presiona Enter, el programa cierra el oyente e interrumpe el bloqueo Aceptar llamada, lo que hace que la rutina regrese.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3