Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menghentikan Pelayan Go dengan Anggun dan Mengelakkan Ralat 'Penggunaan Sambungan Rangkaian Tertutup'?
Dalam Go, menghentikan pelayan mendengar dengan berhati-hati adalah penting untuk mengelakkan penamatan mendadak dan kemungkinan kehilangan data . Satu cabaran ialah melihat ralat khusus yang menunjukkan pendengar telah ditutup, kerana ia tidak dieksport secara eksplisit dalam pustaka standard.
Untuk menangani isu ini, kami boleh memanfaatkan saluran yang telah dilakukan untuk memberi isyarat bahawa pelayan akan ditutup.
fungsi serve() yang diubah suai kini mengendalikan ralat secara berbeza:
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)) } }
Kaedah stop() yang diubah suai kini menghantar isyarat kepada saluran yang telah selesai sebelum menutup pendengar:
// Stop the server by closing the listening listen func (es *EchoServer) stop() { es.done <- true // We can advance past this because we gave it a buffer of 1 es.listen.Close() // Now the Accept will have an error above }
Pendekatan ini menawarkan penambahbaikan dan cara yang anggun untuk mengendalikan pemberhentian pelayan dalam Go. Dengan menggunakan saluran yang telah selesai, kami boleh menghalang paparan mesej ralat yang tidak diingini sambil mengekalkan kawalan ke atas penamatan pelayan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghentikan Pelayan Go dengan Anggun dan Mengelakkan Ralat 'Penggunaan Sambungan Rangkaian Tertutup'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!