我一直在使用 net/http 构建一个 Web 服务。小型 Web 服务将作为 Windows 服务启动,如下所示:https://github.com/Technololist/golang-http-windows-service/blob/master/websvc.go
当通过 Windows 上的“服务”调用“停止”时,服务似乎将终止 Web 服务。 我想等到Web服务和所有底层功能都完成后,然后停止服务。
您对如何使代码像上面提到的那样工作有什么想法或建议吗?我想我缺少一些有关 Windows 服务及其在 Golang 中如何工作的知识。
谢谢你, 延斯
http.ListenAndServe()
,它以无法从代码中关闭服务器的方式包装了一些功能。相反,如果您自己创建一个 http.Server{}
并从 ListenAndServe()
内部调用其 runApp()
函数,则可以在代码的 Shutdown(context.Context)
部分中调用 http.Server{}
的 case svc.Stop, svc.Shutdown:
函数。一旦您调用 http.Server{}.Shutdown()
,它将停止接受新请求,但已经处理的请求将被完成(如果需要,您可以传递一个带有超时的上下文,以强制中止需要 太长 才能完成的请求)。