Go 1.8 http graceful 體驗

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

很高興Go 1.8發布了,這是個值得慶祝的日子。

如何優雅的關閉http服務在Go Web開發中一直被提及和討論的話題,今天Go 1.8的發布終於為我們帶來了這個特性。

文檔中是這樣介紹的:

func (srv *Server) Shutdown(ctx context.Context) error

Shutdown 將無中斷的關閉正在活躍的串連,然後平滑的停止服務。處理流程如下:

  • 首先關閉所有的監聽

  • 然後關閉所有的空閑串連

  • 然後無限期等待串連處理完畢轉為空白閑,並關閉

  • 如果提供了 帶有逾時的Context,將在服務關閉前返回 Context的逾時錯誤

需要注意的是,Shutdown 並不嘗試關閉或者等待 hijacked串連,如 WebSockets。如果需要的話調用者需要分別處理諸如長連線類型的等待和關閉。

其實,你只要調用 Shutdown 方法就好了。

簡單樣本:

// main.gopackage mainimport (    "fmt"    "log"    "net/http"    "os"    "os/signal"    "syscall"    "time")func main() {    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {        fmt.Fprintf(w, "Hello World, %v\n", time.Now())    })    s := &http.Server{        Addr:           ":8080",        Handler:        http.DefaultServeMux,        ReadTimeout:    10 * time.Second,        WriteTimeout:   10 * time.Second,        MaxHeaderBytes: 1 << 20,    }    go func() {        log.Println(s.ListenAndServe())        log.Println("server shutdown")    }()    // Handle SIGINT and SIGTERM.    ch := make(chan os.Signal)    signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)    log.Println(<-ch)    // Stop the service gracefully.    log.Println(s.Shutdown(nil))    // Wait gorotine print shutdown message    time.Sleep(time.Second * 5)    log.Println("done.")}

運行程式:

go run main.go

然後 ctrl + c 終止該程式,會列印出如下資訊:

2017/02/17 11:36:28 interrupt2017/02/17 11:36:28 <nil>2017/02/17 11:36:28 http: Server closed2017/02/17 11:36:28 server shutdown

可以看到,服務被正確關閉了。

在沒有 Shutdown方法之前,ctrl + c就硬生生的終止了,然後就沒有然後了。

更多內容見官方文檔:

https://golang.org/pkg/net/ht...

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.