大项目日记-Hertz学习 | 青训营笔记

153 阅读2分钟

大项目日记-Hertz学习

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

项目进展

目前除聊天记录接口外均已基本实现,但是目前使用的仍是 gin 架构,通过本次青训营课程,我了解到Hertz作为刚刚开源的 Golang 微服务 HTTP 框架,其拥有十分优越的性能,因此在我打算在完成聊天记录接口后将项目整体框架使用Hertz进行重构。

Hertz 的特点

Hertz 作为 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthpttp、 gin、 echo 的优势,因而具有高易用性,高性能、高扩展的特点。

  • 高易用性:在上课学习课程时我便发现Hertz是一种可以快速上手的框架
  • 高性能: Hertz 相较于 go net、 Hertz在某些特殊场景下具有一定的QPS与时延优势
  • 高扩展性:Hertz采用了分层设计,接口较多,易于扩展
  • 多协议支持:Hertz框架原生提供HTTP1.1等协议
  • 网络切换能力:Hertz 实现了 Netpoll 和 Golang 原生网络库 间按需切换能力

Hertz的安装与配置

Golang开发环境

保证现有 Golang 版本 >= 1.15

安装命令行工具hz

go install github.com/cloudwego/hertz/cmd/hz@latest

生成代码

hz new

整理 & 拉取依赖

$ go mod tidy

生成go.mod文件

$ go mod init hertz_demo

Hertz网络库

对于Server, Hertz默认使用notepoll,但可以根据应用场景自行选择合适的网络库来达到最佳性能

server.New(server.WithTransport(standard.NewTransporter))
server.New(server.WithTransport(netpoll.NewTransporter))

从Gorm官方使用文档上学到了以下几点建议\

  1. 使用TLS Server时需要使用go net网络库
  2. 在较大 request size 下,使用 go net 网络库加流式,这里的较大一般指的是 request size 在 1M 以上
  3. 除上述场景外,netpoll 足以胜任

Hertz路由

  1. Hertz 提供了 GETPOSTPUTDELETEANY 等方法用于注册路由
  2. 而且Hertz还提供了路由分组的能力
  3. Hertz指出静态路由、命名路由、通配路由,路由优先级依次递减