在构建自定义服务器应用程序时,最好有一个关闭机制,以确保在服务器关闭之前停止所有正在运行的进程,这也有助于更好地进行内存管理。
我们怎样才能用Golang和它的力量建立这样的机制?在Golang中已经有了一个shutdown函数,它可以让开发人员开箱即用地思考,并创建多个方法来做同样的事情。这将有助于让我们的golang社区变得更好更强大。下面我分享了我的一个答案,希望你们能提出更多的建议和答案。
发布于 2019-03-04 15:57:19
从Go 1.8开始,net/http.Server有一个可以用来停止服务器的函数Shutdown。Go documentation中提供了文档和示例。
发布于 2019-03-04 17:20:16
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://stackoverflow.com/questions/54978683
复制相似问题