Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mematikan Pelayan TCP Go dengan Anggun dan Mengganggu `(*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!