前言
cowboy的使用的过程中, 我注意到有一个量我始终未曾使用过, 就是State.
init(Req, State) ->
{ok, Req, State}.
探索
开始的时候, 我以为 State 是一个 record, 然后我尝试使用 ~p 打印了State.
lager:info("~p~n", [State]) %% 打印结果为 []
结合启动服务的文件, 我猜测 State 的值就是 Route tuple 格式的最后一个值.
Routes = [
{'_', [
{"/health", health, []}
]}
],
Dispatch = cowboy_router:compile(Routes),
{ok, _} = cowboy:start_clear(http, [{port, 8080}], #{env => #{dispatch => Dispatch}})
更改之后, 果然 handler 文件里面接收的 State 的值也修改了
应用场景
说到应用场景, 应该满足以下条件:
取值的方法本身和 handler 文件无关, 何处都可以获取
(虽然我测试下来, 取值似乎无法造成瓶颈, 但还是有一些轻微的影响的)