博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[翻译][erlang]cowboy handler模块的使用
阅读量:6213 次
发布时间:2019-06-21

本文共 1685 字,大约阅读时间需要 5 分钟。

关于Cowboy

Cowboy是基于Erlang实现的一个轻量级、快速、模块化的http web服务器。


Handlers,用于处理HTTP请求的程序处理模块。

Plain HTTP Handlers(常规Handlers)

Cowboy里面的handler最基础的事情就是实现 init/2 回调函数,处理请求,发送客户端响应(可选),最后返回。 Cowboy根据 router configuration (路由配置)接收请求并初始化State。 下面是一个不做任何处理的handler:

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

Cowboy为了保证每一个相应都能有客户端响应,尽管上面例子没有发送客户端返回,客户端仍然会收到一个 204 No Content 的响应。

下面是一个有返回响应的例子:

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

当调用了 cowboy:req/4, Cowboy会马上返回一个客户端响应。

最后我们返回一个三元组。ok 表示handler允许成功,然后返回处理过后的 Req 给Cowboy。 三元组的最后一个元素是一个贯穿在handler所有回调一个state。常规的HTTP handlers一般只附加一个回调函数,terminate/2是一个很少使用的可选的回调函数。

Other Handlers(其它Handlers)

init/2 回调函数也可以用来告诉cowboy,这是一个不同类型的handler,Cowboy应该做一些其他处理。为了方便使用,如果返回handler类型的模块名称,就可以切换handler处理模块。

Cowboy提供了三种可选handler类型:cowboy_reset, Cowboy_websocke和cowboy_loop。另外也可以自己定义handler类型。

切换非常简单,用handler类型替换掉返回的 ok 就可以了。下面是一个切换为 Websocket handler 的代码片段。

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

也可以切换到一个自定义的handler模块:

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

如何使用自定义的handler类型可以查看Sub protocols 章节(https://ninenines.eu/docs/en/cowboy/2.0/guide/sub_protocols)。

Cleaning up

除了Websocket handlers,其它所有类型都提供可选回调函数terminate/3

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

这个回调函数是为了cleanup保留下来的。该函数不能发送响应给客户端。也没有其他返回值(只能返回ok)。

terminate/3之所以是可选是因为其极少会用到。Cleanup应该在各自的进程中直接处理。(通过监控handler进程来知道其何时退出)

Cowboy不会在不同的请求重复使用进程(应该是http短链接设计引起的)。进程在返回之后很快就会被销毁。

Others

英文官方原文:

https://ninenines.eu/docs/en/cowboy/2.0/guide/handlers/#_plain_http_handlers

本文转自 Ron Ngai 博客园博客,原文链接: http://www.cnblogs.com/rond/p/6095149.html ,如需转载请自行联系原作者

你可能感兴趣的文章
Html的空格显示
查看>>
Spring velocity 中文乱码 解决方案
查看>>
MongoDB 工具助手类(.NET)
查看>>
javascript中apply、call和bind的区别
查看>>
【leetcode】Shortest Palindrome(hard)★
查看>>
通过HTTP协议实现多线程下载
查看>>
java object 转为 json
查看>>
多条件筛选的实现
查看>>
background-size 导致的背景不居中问题
查看>>
Robot framework+python安装使用图解版
查看>>
【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
查看>>
LDA-math-神奇的Gamma函数
查看>>
cocos2d-x注意事项(十)Lua发展飞机战争-4-创建主角
查看>>
[HIS] HIT行业常用名词及缩写定义
查看>>
Git 学习笔记--拉取远程分支到本地
查看>>
jquery插件layer
查看>>
[BI基础] 一些不得不了解的概念
查看>>
【转载】mvc3部署
查看>>
Pat(Advanced Level)Practice--1043(Is It a Binary Search Tree)
查看>>
(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
查看>>