gracefulhttp

package
v0.38.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 28, 2023 License: MIT Imports: 11 Imported by: 2

README

优雅的重启和关闭服务器

  • 优雅的重启需要获取原进程监听套接字的文件描述符,所以不能直接使用http.serverListenAndServeListenAndServeTLS

  • 只要将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的提示,在终端运行
  • 刷新网页,可以发现修改部分已经出现在网页上了

使用默认信号示例

examples/default/main.go

用户自定义清理函数示例

examples/userdefined/main.go

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

func NewServer

func NewServer(handler http.Handler, logger zerologger.Logger) Server

NewServer 生成服务器,用来替代 http.Server

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL