當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


GO Server.Shutdown用法及代碼示例

GO語言"net/http"包中"Server.Shutdown"類型的用法及代碼示例。

用法:

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

Shutdown 優雅地關閉服務器而不中斷任何活動連接。關閉首先關閉所有打開的偵聽器,然後關閉所有空閑連接,然後無限期地等待連接返回空閑狀態,然後關閉。如果提供的上下文在關閉完成之前過期,則 Shutdown 返回上下文的錯誤,否則返回關閉服務器的底層偵聽器返回的任何錯誤。

當調用 Shutdown 時,Serve、ListenAndServe 和 ListenAndServeTLS 立即返回 ErrServerClosed 確保程序不退出並等待 Shutdown 返回。

Shutdown 不會嘗試關閉也不會等待被劫持的連接,例如 WebSockets 如果需要,Shutdown 的調用者應單獨通知此類 long-lived 連接關閉並等待它們關閉。有關注冊關閉通知函數的方法,請參見RegisterOnShutdown。

一旦在服務器上調用了 Shutdown,它就不能被重用;未來對諸如 Serve 等方法的調用將返回 ErrServerClosed

例子:

package main

import (
    "context"
    "log"
    "net/http"
    "os"
    "os/signal"
)

func main() {
    var srv http.Server

    idleConnsClosed := make(chan struct{})
    go func() {
        sigint := make(chan os.Signal, 1)
        signal.Notify(sigint, os.Interrupt)
        <-sigint

        // We received an interrupt signal, shut down.
        if err := srv.Shutdown(context.Background()); err != nil {
            // Error from closing listeners, or context timeout:
            log.Printf("HTTP server Shutdown: %v", err)
        }
        close(idleConnsClosed)
    }()

    if err := srv.ListenAndServe(); err != http.ErrServerClosed {
        // Error starting or closing listener:
        log.Fatalf("HTTP server ListenAndServe: %v", err)
    }

    <-idleConnsClosed
}

相關用法


注:本文由純淨天空篩選整理自golang.google.cn大神的英文原創作品 Server.Shutdown。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。