IRIS使用chan通知关闭服务

目录结构

主目录listenUnix

  1. —— main.go

代码示例

main.go

  1. package main
  2. import (
  3. "context"
  4. "time"
  5. "github.com/kataras/iris"
  6. )
  7. func main() {
  8. app := iris.New()
  9. app.Get("/", func(ctx iris.Context) {
  10. ctx.HTML("<h1>Hello, try to refresh the page after ~10 secs</h1>")
  11. })
  12. app.Logger().Info("Wait 10 seconds and check your terminal again")
  13. //在这里模拟一个关机动作......
  14. go func() {
  15. <-time.After(10 * time.Second)
  16. timeout := 5 * time.Second
  17. ctx, cancel := context.WithTimeout(context.Background(), timeout)
  18. defer cancel()
  19. //关闭所有主机,这将通知我们已注册的回调
  20. //在`configureHost` func中。
  21. app.Shutdown(ctx)
  22. }()
  23. // app.ConfigureHost(configureHost) - >或将configureHost作为`app.Addr`参数传递,结果相同。
  24. //像往常一样启动服务器,唯一的区别就是
  25. //我们正在添加第二个(可选)功能
  26. //配置刚刚创建的主机管理。
  27. // http://localhost:8080
  28. //等待10秒钟并检查您的终端
  29. app.Run(iris.Addr(":8080", configureHost), iris.WithoutServerError(iris.ErrServerClosed))
  30. /*
  31. 或者对于简单的情况,您可以使用:
  32. iris.RegisterOnInterrupt用于CTRL/CMD+C和OS事件(os.sign,os.kill)的全局捕获。
  33. 查看“gracefulShutdown”示例了解更多信息。
  34. */
  35. }
  36. func configureHost(su *iris.Supervisor) {
  37. //这里我们可以完全访问将要创建的主机
  38. //在`app.Run`函数或`NewHost`。
  39. //我们在这里注册一个关闭“事件”回调:
  40. su.RegisterOnShutdown(func() {
  41. println("server is closed")
  42. })
  43. // su.RegisterOnError
  44. // su.RegisterOnServe
  45. }