这是我参与「第五届青训营」笔记创作活动的第7天。
学习内容
今天学习了Kitex和Hertz两个框架,Kitex是一个RPC框架,Hertz是一个Web框架。
Kitex
RPC框架,目前对Windows的支持不完善。
Kitex的使用
定义IDL
使用IDL定义服务与接口。
如果我们要进行RPC,就需要知道对方的接口是什么,需要传什么参数,同时也需要知道返回的值是什么样的。这时候,就需要通过IDL来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道函数签名一样。
namespqce go api
struct Request{
1 : string message
}
struct Response{
1 : string message
}
service Echo{
Response echo(1 : Requset req)
}
服务默认监听8888端口
创建Client
c, err := echo.NewClient("clientName", client.WithHostPorts("0.0.0.0:8888"))
发起请求
req := $api.Request(Message: "xxxx")
resp, err := c.Echo(contest.Bockground(), req, callopt.WithRPCTimeout(3*time.Second))
Kitex的服务注册与发现
目前,Kitex的服务注册与发现已经对接了主流的服务与发现中心,如ETCD,Nacos等。
Kitex生态
Hertz
Web框架
Hertz的使用
服务监听8080端口并注册了一个GET方法的路由函数。
Hertz路由
Hertz提供了GET、POST、PUT、DELETE和ANY等方法用于注册路由。
Hertz提供了路由组(Group)的能力,用于支持路由分组的功能
Hertz提供了参数路由和通配路由,路由的优先级为:静态路由 > 命名路由 > 通配路由
Hertz参数绑定
Hertz提供了Bind、Validate、BindAndValidate函数用于进行参数绑定和校验
Hertz中间件
Hertz的中间件主要分为客户端中间件和服务端中间件。
中间件首尾相连最终形成一个过滤器链,用户可以在中间件中设定一些通用的处理规则,比如:统一错误处理,用户信息验证,跨域处理等。Hertz提供了两个通用的中间件,一个是JWT验证,一个是Cors跨域中间件,开箱即用。
Hertz Client
Hertz提供了HTTP Client用于帮助用户发送HTTP请求。
Hertz性能
- 网络库 Netpoll
- Json编解码Sonic
- 使用sync.Pool复用对象协议层数据解析优化