Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mematikan Pelayan TCP Go dengan Anggun dan Mengganggu `(*TCPListener) Accept` Goroutine?

Bagaimana untuk Mematikan Pelayan TCP Go dengan Anggun dan Mengganggu `(*TCPListener) Accept` Goroutine?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 07:27:02774semak imbas

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

Mengganggu Pelaksanaan Go-routine (*TCPListener) Terima

Semasa mencipta pelayan TCP dalam Go, anda mungkin menghadapi cabaran dengan anggun menutup pelayan dan mengganggu fungsi pengendalian goroutine (*TCPListener) Terima.

Dalam Go, fungsi (*TCPListener) Terima perlaksanaan blok sehingga sambungan diterima. Untuk mengganggu goroutine ini, anda hendaklah:

Tutup jaring.Pendengar:

Kunci untuk mengganggu goroutine Terima ialah menutup jaring.Pendengar yang diperoleh daripada jaring. Dengar(...). Dengan menutup pendengar, anda memberi isyarat kepada sistem pengendalian bahawa tiada lagi sambungan akan diterima, menyebabkan goroutine Terima terkeluar.

Kembali dari Goroutine:

Selepas ditutup pendengar, pastikan goroutine anda kembali. Jika goroutine mempunyai kod berikutan panggilan Terima, ia akan terus melaksanakan dan boleh menyebabkan kelakuan atau ralat yang tidak diingini.

Kod Contoh:

<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>

Kod ini mencipta TCPListener pada port 8080 dan melancarkan goroutine yang mengendalikan sambungan masuk dalam gelung tak terhingga. Apabila pengguna menekan enter, program menutup pendengar dan mengganggu panggilan Terima yang menyekat, menyebabkan goroutine kembali.

Atas ialah kandungan terperinci Bagaimana untuk Mematikan Pelayan TCP Go dengan Anggun dan Mengganggu `(*TCPListener) Accept` Goroutine?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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