首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正常关闭golang服务器?

如何正常关闭golang服务器?
EN

Stack Overflow用户
提问于 2019-03-04 15:45:27
回答 2查看 3.5K关注 0票数 0

在构建自定义服务器应用程序时,最好有一个关闭机制,以确保在服务器关闭之前停止所有正在运行的进程,这也有助于更好地进行内存管理。

我们怎样才能用Golang和它的力量建立这样的机制?在Golang中已经有了一个shutdown函数,它可以让开发人员开箱即用地思考,并创建多个方法来做同样的事情。这将有助于让我们的golang社区变得更好更强大。下面我分享了我的一个答案,希望你们能提出更多的建议和答案。

EN

回答 2

Stack Overflow用户

发布于 2019-03-04 15:57:19

从Go 1.8开始,net/http.Server有一个可以用来停止服务器的函数ShutdownGo documentation中提供了文档和示例。

票数 2
EN

Stack Overflow用户

发布于 2019-03-04 17:20:16

代码语言:javascript
复制
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.Printf("HTTP server ListenAndServe: %v", err)
    }

    <-idleConnsClosed
}

文档为https://golang.org/pkg/net/http/#Server.Shutdown

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54978683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档