Wie kann ich einen Go-TCP-Server ordnungsgemäß herunterfahren und die Goroutine „(*TCPListener) Accept' unterbrechen?

Patricia Arquette
Freigeben: 2024-11-03 07:27:02
Original
771 Leute haben es durchsucht

How to Gracefully Shut Down a Go TCP Server and Interrupt the `(*TCPListener) Accept` Goroutine?

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage