启动Hertz引擎(一) | 青训营笔记

145 阅读1分钟

Hertz,是字节内部开源的http框架,具有高易用性、易扩展、低时延等特点,是一个可以代替Gin的企业级 HTTP 框架。下面简单看一下Hertz的启动方式和引擎。

type Hertz struct {
    *route.Engine
    // Used to receive signals for graceful shutdown
    signalWaiter func(err chan error) error
}

Hertz引擎:
实体为Hertz结构体,一共两个变量:核心引擎 route.Engine 和接收关闭信号的变量方法。

初始化:
提供 New() 和 Default() 方法来生成引擎

func New(opts ...config.Option) *Hertz {
    options := config.NewOptions(opts)
    h := &Hertz{Engine: route.NewEngine(options)}
    return h
}
  • Default() 使用 Recovery 中间件,会 recover 导致程序溃奔的panic
func Default(opts ...config.Option) *Hertz {
     h := New(opts...) 
     h.Use(recovery.Recovery())
     return h  
}
  • New() 没有任何配置的引擎

启动服务:
Hertz提供Spin方法来启动服务,不建议直接用run,原因如下

  • Spin 因为其会将服务注册到注册中心,使用signalWaiter监视错误,并支持优雅退出。而run不会。
func main() {
    h := server.New()
    h.Spin() // 使用signalWaiter监视错误
}
func main() {
    h := server.New()
    // Start with Run function
    if err:= h.Run (); err != Nil {
        panic(err) // panic
    }
}