Cowboy 用户指南 (九) - Handlers

Handlers(处理程序)

处理程序是处理HTTP请求的Erlang模块。

普通的HTTP处理程序

Cowboy中最基本的处理程序实现了强制的init/2回调,操作请求,可选地发送响应,然后返回。

这个回调接收到Req对象和路由器配置中定义的初始状态。

一个不做任何事情的处理程序是这样的:

init(Req, State) ->
    {ok, Req, State}.

尽管没有发送应答,一个204 No Content响应将发送到客户端,因为Cowboy确保为每个请求发送响应。

我们需要使用Req对象来进行应答。

init(Req0, State) ->
    Req = cowboy_req:reply(200, #{
        <<"content-type">> => <<"text/plain">>
    }, <<"Hello World!">>, Req0),
    {ok, Req, State}.

当调用Cowboy:reply/4时,Cowboy将立即发送一个响应。

然后返回一个3元组。ok表示处理程序成功运行。我们也把修改后的请求Req返还给Cowboy。

元组的最后一个值是将在该处理程序的每个后续回调中使用的状态。普通HTTP处理程序只有一个额外的回调函数,它是可选的并且很少使用的terminate/3。

其他处理程序

init/2回调也可以用来通知Cowboy,这是一种不同的处理程序,并且Cowboy应该切换到它。为此,您只需返回您想要切换到的处理程序类型的模块名。

Cowboy有三种处理程序类型,你可以切换:cowboy_restcowboy_websocket 和 cowboy_loop。除此之外,您还可以定义自己的处理程序类型。

切换很简单。您只需返回想要使用的处理程序类型的名称,而不是返回ok。下面的代码片段切换到Websocket处理程序:

init(Req, State) ->
    {cowboy_websocket, Req, State}.

清理

所有的处理器类型都提供了可选的terminate/3回调函数

terminate(_Reason, _Req, _State) ->
    ok.

这个回调被严格保留给任何需要的清理。您不能从这个函数发送响应。没有其他返回值。

这个回调是可选的,因为它很少是必需的。清理应该在单独的进程中直接完成(通过监视处理程序进程来检测它何时退出)。

Cowboy不会为不同的请求重用进程。此调用返回后,进程将很快终止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值