Heim > Backend-Entwicklung > Golang > Wie kann ich einen Go-Listening-Server ordnungsgemäß und ohne Fehler stoppen?

Wie kann ich einen Go-Listening-Server ordnungsgemäß und ohne Fehler stoppen?

Susan Sarandon
Freigeben: 2024-12-10 00:26:11
Original
691 Leute haben es durchsucht

How to Gracefully Stop a Go Listening Server Without Errors?

So stoppen Sie einen Listening-Server in Go ordnungsgemäß

In Go blockiert die Listen.Accept-Funktion die Ausführung, bis eine Verbindung akzeptiert wird. Dies macht es schwierig, einen lauschenden Server ordnungsgemäß zu stoppen, da Sie den Unterschied zwischen einem Fehler und einer geschlossenen Verbindung nicht erkennen können.

Eine Lösung besteht darin, einen fertigen Kanal zu verwenden, um zu signalisieren, wann der Server aufhören soll zu lauschen. Dadurch können Sie den Listening-Socket schließen, ohne eine Fehlermeldung zu erhalten.

Hier ist ein Beispiel dafür:

// Echo server struct
type EchoServer struct {
    listen net.Listener
    done   chan bool
}

// Listen for incoming connections
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))
    }
}

// Stop the server by closing the listening listen
func (es *EchoServer) stop() {
    es.done <- true   // We can advance past this because we gave it buffer of 1
    es.listen.Close() // Now it the Accept will have an error above
}
Nach dem Login kopieren

Dieser Code verwendet einen fertigen Kanal, um zu signalisieren, wann der Server sollte Hör auf zuzuhören. Wenn die Stop-Methode aufgerufen wird, sendet sie einen Wert an den Fertigkanal, wodurch die Serve-Methode beendet wird.

Dadurch können Sie einen lauschenden Server ordnungsgemäß stoppen, ohne dass eine Fehlermeldung angezeigt wird.

Das obige ist der detaillierte Inhalt vonWie kann ich einen Go-Listening-Server ordnungsgemäß und ohne Fehler stoppen?. 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