Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menghentikan Pelayan Go Listening Tanpa Ralat?

Bagaimana untuk Menghentikan Pelayan Go Listening Tanpa Ralat?

Susan Sarandon
Lepaskan: 2024-12-10 00:26:11
asal
692 orang telah melayarinya

How to Gracefully Stop a Go Listening Server Without Errors?

Cara Menghentikan Pelayan Mendengar dengan Anggun dalam Go

Dalam Go, fungsi Listen.Accept menyekat pelaksanaan sehingga sambungan diterima. Ini menyukarkan untuk menghentikan pelayan mendengar dengan anggun kerana anda tidak dapat membezakan antara ralat dan sambungan tertutup.

Satu penyelesaian ialah menggunakan saluran selesai untuk memberi isyarat apabila pelayan harus berhenti mendengar. Ini membolehkan anda menutup soket mendengar tanpa mendapat ralat.

Berikut ialah contoh cara melakukannya:

// 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
}
Salin selepas log masuk

Kod ini menggunakan saluran siap untuk memberi isyarat apabila pelayan harus berhenti mendengar. Apabila kaedah henti dipanggil, ia menghantar nilai ke saluran yang telah selesai, yang menyebabkan kaedah servis keluar.

Ini membolehkan anda menghentikan pelayan mendengar dengan anggun tanpa mendapat ralat.

Atas ialah kandungan terperinci Bagaimana untuk Menghentikan Pelayan Go Listening Tanpa Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan