请求上下文
请求上下文 RequestContext
是用于保存 HTTP 请求和设置 HTTP 响应的上下文,它提供了许多方便的 API 接口帮助用户开发。
上下文传递与并发安全
说明
Hertz 在 HandlerFunc
设计上,同时提供了一个标准 context.Context
和一个请求上下文作为函数的入参。
handler/middleware
函数签名为:
type HandlerFunc func(c context.Context, ctx *RequestContext)
元数据存储方面
两个上下文都有存储值的能力,具体选择使用哪一个上下文有个简单依据:所储存值的生命周期和所选择的上下文要匹配。
具体细节
ctx
主要用来存储请求级别的变量,请求结束就回收了,特点是查询效率高(底层是 map
),协程不安全,且未实现 context.Context
接口。
c
作为上下文在中间件 /handler
之间传递。拥有 context.Context
的所有语义,协程安全。所有需要 context.Context
接口作为入参的地方,直接传递 c
即可。
除此之外,如果存在异步传递 ctx
的场景,hertz 也提供了 ctx.Copy()
接口,方便业务能够获取到一个协程安全的副本。
最后修改
July 3, 2023
: Update response.md (604692d)