Rumah >pembangunan bahagian belakang >Golang >Analisis bagaimana untuk menutup perkhidmatan http dengan anggun di golang
Golang ialah bahasa pengaturcaraan yang sangat popular dengan keupayaan pemprosesan serentak yang cekap dan prestasi cemerlang. Saya percaya ramai pembangun golang akan menghadapi masalah seperti itu, bagaimana untuk menutup perkhidmatan http dengan anggun di golang?
Pertama sekali, kita perlu tahu bahawa mencipta perkhidmatan http adalah agak mudah, dan ia hanya memerlukan beberapa baris kod. Sebagai contoh, berikut ialah contoh mudah:
package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello") }) http.ListenAndServe(":8080", nil) }
Di sini kami mencipta perkhidmatan http baharu yang mendengar port tempatan 8080 dan mengembalikan "Hello" untuk setiap lawatan. Tetapi bagaimana untuk menutup perkhidmatan ini dengan anggun?
Kaedah biasa ialah menggunakan os.Signal untuk menguruskan kitaran hayat perkhidmatan. os.Signal ialah isyarat gangguan yang dihantar oleh sistem pengendalian kepada proses, seperti Ctrl+C, dsb., dengan tujuan menghendaki atur cara untuk menamatkan pelaksanaan. Dalam golang, kita boleh mendengar isyarat ini dan kemudian melaksanakan beberapa fungsi cangkuk selepas menerima isyarat untuk menutup perkhidmatan http dengan anggun.
Pelaksanaan khusus adalah seperti berikut:
package main import ( "context" "fmt" "net/http" "os" "os/signal" "syscall" "time" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello") }) srv := &http.Server{Addr: ":8080"} signalChan := make(chan os.Signal, 1) signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM) go func() { sig := <-signalChan fmt.Printf("Signal Received: %s, Gracefully shutting down...\n", sig) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() srv.Shutdown(ctx) }() fmt.Println("Server starting...") if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { fmt.Printf("server start failed, err: %v\n", err) return } fmt.Println("Server closed.") }
Kami mendaftarkan dua isyarat melalui kaedah isyarat.Beritahu, iaitu Ctrl+C dan bunuh. Kemudian, tunggu ketibaan isyarat melalui gelung tak terhingga dalam fungsi utama. Apabila isyarat tiba, kami mula-mula akan mencetak satu baris log, menunjukkan bahawa kami berjaya menerima isyarat, dan kemudian kami akan memanggil kaedah Shutdown() http.Server untuk menutup perkhidmatan http seperti biasa konteksnya.
Apabila kita menghantar objek konteks.Konteks kepada kaedah Shutdown() http.Server, perkhidmatan http akan memasuki proses penutupan anggun Proses khusus kaedah Shutdown() adalah seperti berikut:
Sudah tentu, ini hanya contoh golang menutup perkhidmatan http dengan anggun anda boleh mengubah suai mengikut persekitaran anda yang sebenar.
Atas ialah kandungan terperinci Analisis bagaimana untuk menutup perkhidmatan http dengan anggun di golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!