Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menghentikan Pelayan Go Listening dengan Anggun Tanpa Ralat Palsu?

Bagaimanakah Saya Boleh Menghentikan Pelayan Go Listening dengan Anggun Tanpa Ralat Palsu?

Linda Hamilton
Lepaskan: 2024-12-12 18:59:10
asal
841 orang telah melayarinya

How Can I Gracefully Stop a Go Listening Server Without Spurious Errors?

Menghentikan Pelayan Mendengar dengan Anggun dalam Go

Latar Belakang

Pakej net Go menyediakan keupayaan untuk mencipta pelayan mendengar. Walau bagaimanapun, menghentikan pelayan ini dengan anggun boleh mencabar kerana sifat menyekat dengar.Kaedah terima.

Pendekatan Sedia Ada

Satu pendekatan biasa untuk menghentikan pelayan ialah menutup soket mendengar. Walau bagaimanapun, ini boleh mengakibatkan ralat yang tidak dapat dibezakan daripada ralat tulen semasa penerimaan sambungan. Akibatnya, coretan kod berikut mempamerkan isu ini:

// ...

// Listen for incoming connections
func (es *EchoServer) serve() {
  for {
    conn, err := es.listen.Accept()
    // FIXME: I'd like to detect "use of closed network connection" here
    // FIXME: but it isn't exported from net
    if err != nil {
      log.Printf("Accept failed: %v", err)
      break
    }
    // ...
  }
  // ...
}
Salin selepas log masuk

Pendekatan Dipertingkat

Untuk menangani had ini, kami boleh menggunakan saluran es.done untuk menghantar isyarat sebelum pelayan berhenti. Begini cara kod boleh dipertingkatkan:

// ...

// Listen for incoming connections
func (es *EchoServer) serve() {
  for {
    conn, err := es.listen.Accept()
    if err != nil {
      select {
      case <-es.done:
        // Server is being stopped, so we can exit without logging the error.
      default:
        log.Printf("Accept failed: %v", err)
      }
      return
    }
    // ...
  }
}

// Stop the server by closing the listening socket
func (es *EchoServer) stop() {
  es.done <- true
  es.listen.Close()
}
Salin selepas log masuk

Dengan menghantar nilai ke saluran es.done sebelum menutup soket mendengar, fungsi servis boleh menentukan apabila pelayan sedang dihentikan dan keluar dengan anggun tanpa log palsu kesilapan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghentikan Pelayan Go Listening dengan Anggun Tanpa Ralat Palsu?. 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