线上服务要发版,但又不想让正在处理的请求被掐断,最直接的办法是 graceful shutdown: 收到信号后停止 accept,等手上的连接处理完再退出。
关键点是 http.Server.Shutdown(ctx) 之后要让监听套接字先关掉,
否则客户端还在往旧连接上打。配合 systemd 的 Restart=always 就能做到不丢请求。
线上服务要发版,但又不想让正在处理的请求被掐断,最直接的办法是 graceful shutdown: 收到信号后停止 accept,等手上的连接处理完再退出。
关键点是 http.Server.Shutdown(ctx) 之后要让监听套接字先关掉,
否则客户端还在往旧连接上打。配合 systemd 的 Restart=always 就能做到不丢请求。
补充一点:Shutdown 不会等 WebSocket,长连接要自己维护一个集合手动关。
用 systemd 的 KillSignal 配合一下会更稳,默认 SIGTERM 就够。
请遵守版规,禁止发布广告与联系方式。