README
¶
优雅的重启和关闭服务器
-
优雅的重启需要获取原进程监听套接字的文件描述符,所以不能直接使用
http.server
的ListenAndServe
和ListenAndServeTLS
-
只要将
http.Server
替换为github.com/zerogo-hub/zero-helper/graceful
即可 -
优雅的关闭服务器:
- 服务器会关闭监听,执行用户注册的清理函数,等待未处理完毕的连接继续处理
- 服务器每隔
500
毫秒判断一次所有连接是否处理完毕,如果处理完毕,则关闭服务器 - 如果直到超时,都未处理完,直接关闭服务器。如果没有额外设置,默认超时时间为
5
秒
-
优雅的重启服务器:
- 新进程"继承"旧进程的
os.Stdin, os.Stdout, os.Stderr
三个文件描述符以及监听套接字
的文件描述符 - 旧进程优雅的关闭,监听新连接的工作由新进程接手
- 新进程"继承"旧进程的
使用测试示例
- 在测试目录下执行
go run main.go
,生成main
文件 - 运行
./main
运行程序 - 根据终端输出打开网页
- 修改
main.go
代码,并执行go run main.go
,生成新的main
文件 - 网页中有提示形如
kill -USR2 70386 to restart
的提示,在终端运行 - 刷新网页,可以发现修改部分已经出现在网页上了
使用默认信号示例
用户自定义清理函数示例
Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Server ¶
type Server interface { // ListenAndServe 用于替代 `http.Server.ListenAndServe` ListenAndServe(addr string) error // ListenAndServeTLS 用于替代 `http.Server.ListenAndServeTLS` ListenAndServeTLS(addr, certFile, keyFile string) error // Close 直接关闭服务器 Close() // Shutdown 优雅关闭服务器 // 关闭监听 // 执行之前注册的关闭函数(RegisterShutdownHandler),可以用于清理资源等 // 关闭空闲连接,等待激活的连接变为空闲,再关闭它 Shutdown() // Restart 重启服务 Restart() // SetShutdownTimeout 设置优雅退出超时时间 // 服务器会每隔500毫秒检查一次连接是否都断开处理完毕 // 如果超过超时时间,就不再检查,直接退出 // 如果要单独给指定的服务器设置 超时时间,可以使用 WithTimeout // // ms: 单位:毫秒,当 <= 0 时无效,直接退出 SetShutdownTimeout(ms int) // RegisterShutdownHandler 注册关闭函数 // 按照注册的顺序调用这些函数 // 所有已经添加的服务器都会响应这个函数 RegisterShutdownHandler(f func()) // ListenSignal 监听信号 ListenSignal() }
Server 用来替代 http.Server
Click to show internal directories.
Click to hide internal directories.