gpt4 book ai didi

http - http.ListenAndServe 在什么情况下会返回

转载 作者:IT王子 更新时间:2023-10-29 01:39:50 26 4
gpt4 key购买 nike

我看到很多代码都在做这种事情:

log.Fatal(http.ListenAndServe(":8080",nil))

我从未见过 http 服务器返回错误,但我想更多地了解我可能会遇到哪些类型的故障场景。

如果我的处理程序代码崩溃,它会停止吗?它只会在最初无法绑定(bind)的情况下返回吗?

确保服务器尽可能保持事件状态的最佳做法是什么?

最佳答案

Will it stop if my handler code panics?

没有。内置的 http 服务器从 panic 中恢复并记录它们。

Will it only return in the case where it can't bind initially?

这是通常的原因,但也可能是某些其他错误会迫使监听器关闭。

What is the best practice for making sure the server stays active to the highest degree possible?

如果 http 服务器的主循环退出,则可能是您不想尝试从中恢复的 fatal error 。如果在尝试绑定(bind)地址时该调用返回,您可以检查 address in use 错误,然后等待并重试。

// Example to show the error types and fields on a *nix system.
// You should check the validity of these assertions if you don't want to
// panic. Due to the fact that this reaches into syscall, it's probably
// not much better than checking the string for "address already in use"

if err.(*net.OpError).Err.(*os.SyscallError).Err == syscall.EADDRINUSE {
fmt.Println("Address in use")
}

记住ListenAndServe其实是2次调用,你可以自己把它们分开。它创建一个 net.Listener,然后将其提供给 http.ServerServe(l net.Listener) 方法。

关于http - http.ListenAndServe 在什么情况下会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25920963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com