Web 服务器正常关闭未按预期工作
Posted
技术标签:
【中文标题】Web 服务器正常关闭未按预期工作【英文标题】:Web server graceful shutdown not working as expected 【发布时间】:2019-10-28 09:27:14 【问题描述】:我之前写过一篇关于在 Go 中通过优雅关闭创建网络服务器的博客。
https://marcofranssen.nl/go-webserver-with-gracefull-shutdown/#TLDR
此解决方案完美运行,但是对于更大的项目,我想进一步构建代码。
我已经按照以下要点重构了这段代码。
https://gist.github.com/marcofranssen/699c1aa97c8a33ab20b5eccada275b08
由于某种原因,srv.ListenAndServe()
的行似乎没有被执行,而优雅的关闭仍然像以前一样在 go 例程中运行。
对我来说,代码看起来相同,只是重构为单独的文件并添加了一个 Start 函数。
谁能解释一下为什么它直到我发出中断信号才执行,导致 http 服务器立即启动和关闭?
【问题讨论】:
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须在问题本身中包含所需的行为、特定问题或错误以及重现它所需的最短代码 . 【参考方案1】:我在社区的 Gopher 同伴的帮助下找到了答案。
包含srv.ListenAndServe()
的代码行是阻塞代码行,导致该代码行之后的日志不会发生。
在我之前的博客中演示的原始代码中,我将这个日志放在srv.ListenAndServe()
的前面。因此,在该示例中,相同的代码按预期记录到控制台。
所以毕竟这是一个愚蠢的错误,您可以轻松地阅读多次。基本上交换了两行代码,我忘记了http.ListenAndServe()
的阻塞行为。
要点:
http.ListenAndServe() 根据定义是阻塞的,因此不会在该行之后运行任何代码。
【讨论】:
以上是关于Web 服务器正常关闭未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章