Web 服务器正常关闭未按预期工作
Web server graceful shutdown not working as expected
我之前写过一篇关于在 Go 中创建网络服务器并正常关闭的博文。
https://marcofranssen.nl/go-webserver-with-gracefull-shutdown/#TLDR
此解决方案非常有效,但是对于更大的项目,我想进一步构建代码。
我已经按照以下要点重构了这段代码。
https://gist.github.com/marcofranssen/699c1aa97c8a33ab20b5eccada275b08
出于某种原因,带有 srv.ListenAndServe()
的行似乎没有执行,而正常关闭仍然像以前一样在 go 例程中运行。
对我来说,代码看起来完全一样,只是重构为单独的文件并添加了 Start 函数。
谁能解释为什么在我发出中断信号之前它不执行,导致 http 服务器立即启动和关闭?
在社区的 Gopher 小伙伴的帮助下,我找到了答案。
包含srv.ListenAndServe()
的代码行是一个阻塞代码行,导致这行代码之后的日志不会发生。
在我之前的博客中演示的原始代码中,我在 srv.ListenAndServe()
行的前面有此日志。因此,在该示例中,相同的代码按预期记录到控制台。
毕竟这是一个愚蠢的错误,您可以轻松地多次阅读。基本上交换了 2 行代码,我忘记了 http.ListenAndServe()
.
的阻塞行为
关键要点:
http.ListenAndServe() is blocking by definition and therefore will not run any code after that line.
我之前写过一篇关于在 Go 中创建网络服务器并正常关闭的博文。
https://marcofranssen.nl/go-webserver-with-gracefull-shutdown/#TLDR
此解决方案非常有效,但是对于更大的项目,我想进一步构建代码。
我已经按照以下要点重构了这段代码。
https://gist.github.com/marcofranssen/699c1aa97c8a33ab20b5eccada275b08
出于某种原因,带有 srv.ListenAndServe()
的行似乎没有执行,而正常关闭仍然像以前一样在 go 例程中运行。
对我来说,代码看起来完全一样,只是重构为单独的文件并添加了 Start 函数。
谁能解释为什么在我发出中断信号之前它不执行,导致 http 服务器立即启动和关闭?
在社区的 Gopher 小伙伴的帮助下,我找到了答案。
包含srv.ListenAndServe()
的代码行是一个阻塞代码行,导致这行代码之后的日志不会发生。
在我之前的博客中演示的原始代码中,我在 srv.ListenAndServe()
行的前面有此日志。因此,在该示例中,相同的代码按预期记录到控制台。
毕竟这是一个愚蠢的错误,您可以轻松地多次阅读。基本上交换了 2 行代码,我忘记了 http.ListenAndServe()
.
关键要点:
http.ListenAndServe() is blocking by definition and therefore will not run any code after that line.