Hooks
钩子函数(Hooks)是一个通用的概念,表示某事件触发时所伴随的操作。
Hertz 提供了全局的 Hook 注入能力,用于在服务触发启动后和退出前注入自己的处理逻辑。
StartHook
StartHook
在 Hertz 当中表示服务触发启动后需调用的函数,使用 CtxErrCallback
类型表示。Hertz 使用 OnRun
属性存储 StartHook
列表。
触发 Server 启动后,框架会按函数声明顺序依次调用所有的 StartHook
函数,完成调用之后,才会正式开始端口监听,如果发生错误,则立刻终止服务。
函数签名:
示例代码:
提示:启动服务,将在控制台顺序打印三个 StartHook
函数的日志。
ShutdownHook
ShutdownHook
在 Hertz 当中表示服务退出前需调用的函数,使用 CtxCallback
类型表示。Hertz 使用 OnShutdown
属性存储 ShutdownHook
列表。
Server 退出前,框架会并发地调用所有声明的 ShutdownHook
函数,并且可以通过 server.WithExitWaitTime
配置最大等待时长,默认为 5 秒,如果超时,则立刻终止服务。
ShutdownHook
的调用本质上是 Hertz 优雅退出 的一环。
函数签名:
示例代码 1:
提示:终止服务,将在控制台乱序打印三个 ShutdownHook
函数的日志。
示例代码 2:
提示:终止服务时,因为钩子函数执行时间超过 2 秒,打印超时日志。
OnAccept
OnAccept
是一个在连接建立后且被添加到 epoll 前调用的函数。
示例代码:
提示:在发出请求后,将在控制台打印 OnAccept
函数的日志。
main.go:32: [Info] run the onAccept
main.go:38: [Info] pong
OnConnect
OnConnect
是一个在其被添加到 epoll 后调用的函数。它和 OnAccept
的不同之处在于它可以获取数据但是 OnAccept
不可以。
示例代码:
提示:在发出请求后,将在控制台打印 OnConnect
函数的日志。
main.go:19: [Info] onconnect
main.go:20: [Info] [71 69 84]