Eine Go-Routine unterbrechen und ausführen (*TCPListener) Akzeptieren
Beim Erstellen eines TCP-Servers in Go stoßen Sie möglicherweise auf die Herausforderung, elegant vorzugehen Herunterfahren des Servers und Unterbrechen der Goroutine-Verarbeitung func (*TCPListener) Accept.
In Go blockiert func (*TCPListener) Accept die Ausführung, bis eine Verbindung empfangen wird. Um diese Goroutine zu unterbrechen, sollten Sie:
net.Listener schließen:
Der Schlüssel zum Unterbrechen der Accept-Goroutine besteht darin, den net.Listener zu schließen, der von net erhalten wird. Hören(...). Durch das Schließen des Listeners signalisieren Sie dem Betriebssystem, dass keine Verbindungen mehr empfangen werden, wodurch die Accept-Goroutine beendet wird.
Rückkehr aus der Goroutine:
Nach dem Schließen Stellen Sie als Zuhörer sicher, dass Ihre Goroutine zurückkehrt. Wenn die Goroutine nach dem Accept-Aufruf über Code verfügt, wird sie weiterhin ausgeführt und kann unbeabsichtigtes Verhalten oder Fehler verursachen.
Beispielcode:
<code class="go">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 }</code>
Dieser Code erstellt einen TCPListener auf Port 8080 und startet eine Goroutine, die eingehende Verbindungen in einer Endlosschleife verarbeitet. Wenn der Benutzer die Eingabetaste drückt, schließt das Programm den Listener und unterbricht den blockierenden Accept-Aufruf, wodurch die Goroutine zurückkehrt.
Das obige ist der detaillierte Inhalt vonWie kann ich einen Go-TCP-Server ordnungsgemäß herunterfahren und die Goroutine „(*TCPListener) Accept' unterbrechen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!