当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。