首页 › 技术交流 › 正文

浅谈 Go 服务的平滑重启

发表于 2026-10-29 · 阅读 1,204 · 回复 6
L
楼主
linx1#

线上服务要发版,但又不想让正在处理的请求被掐断,最直接的办法是 graceful shutdown: 收到信号后停止 accept,等手上的连接处理完再退出。

关键点是 http.Server.Shutdown(ctx) 之后要让监听套接字先关掉, 否则客户端还在往旧连接上打。配合 systemd 的 Restart=always 就能做到不丢请求。

签名:写代码,也写文档。
W
wang_2#

补充一点:Shutdown 不会等 WebSocket,长连接要自己维护一个集合手动关。

Z
zhang.dev3#

用 systemd 的 KillSignal 配合一下会更稳,默认 SIGTERM 就够。

发表回复

请遵守版规,禁止发布广告与联系方式。

Powered by Discuz! X3.4 · © 2026 极客社区