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 服务器正常关闭未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Azure NSG 未按预期工作

Spring 2 Web Security 不同的身份验证未按预期工作

Vue计算属性未按预期工作[关闭]

播放 HTML5 音频标签,但控件未按预期工作

Apache Rewrite 规则未按预期工作

Litespeed 服务器上的重定向未按预期工作