[翻译][erlang]cowboy handler模块的使用
关于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(, [
{<<"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
[翻译][erlang]cowboy handler模块的使用的更多相关文章
- [翻译][erlang]cowboy路由模块使用
Cowboy是基于Erlang实现的一个轻量级.快速.模块化的http web服务器. 本文官方原文:http://ninenines.eu/docs/en/cowboy/1.0/guide/rout ...
- Erlang cowboy 入门参考
Erlang cowboy 入门参考 cheungmine,2014-10-28 本文翻译自: http://ninenines.eu/docs/en/cowboy/HEAD/guide/gettin ...
- Erlang cowboy routing 路由
Erlang cowboy routing 路由 本文译自: http://ninenines.eu/docs/en/cowboy/1.0/guide/routing/ Routing 默认情况下,C ...
- Erlang cowboy websocket 服务器
Erlang cowboy websocket 服务器 原文见于: http://marcelog.github.io/articles/erlang_websocket_server_cowboy_ ...
- Erlang cowboy 处理简单的HTTP请求
Erlang cowboy 处理简单的HTTP请求 原文出自: Handling plain HTTP requests 处理请求的最简单的方式是写一个简单的HTTP处理器.它的模型参照Erlang/ ...
- Erlang cowboy http request生命周期
Erlang cowboy http request生命周期 翻译自: http://ninenines.eu/docs/en/cowboy/1.0/guide/http_req_life/ requ ...
- nginx -- handler模块(100%)
handler模块简介 相信大家在看了前一章的模块概述以后,都对nginx的模块有了一个基本的认识.基本上作为第三方开发者最可能开发的就是三种类型的模块,即handler,filter和load-ba ...
- Erlang cowboy 处理不规范的client
Erlang cowboy 处理不规范的client Cowboy 1.0 參考 本章: Dealing with broken clients 存在很多HTTP协议的实现版本号. 很多广泛使用的cl ...
- Erlang的常驻模块与功能模块
Erlang的常驻模块与功能模块Residence moduleThe module where a process has its tail-recursive loop function(s).I ...
随机推荐
- 查找jsp页面报错技巧
在报错跳转页面打印错误信息<div>系统执行发生错误,信息描述如下:</div> <div>错误状态代码是:${pageContext.errorData.stat ...
- Windows转到linux中,文件乱码,文件编码转换 & 解决sqlplus连接oracle乱码
转载:http://www.cnblogs.com/wanyao/p/3399269.html 最近,学习又重新开始Linux学习,所以一直在Centos中,昨天一朋友把他在Windows下写的C程序 ...
- delphi 类方法、类变量、类常量、类属性的研究,自己的研究
群里我师傅给我的答案: unit Unit4; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Vari ...
- PHP简单利用token防止表单重复提交
<?php /* * PHP简单利用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token() { $_S ...
- pgm revert转换 成jpg 人脸识别图片
最近在搞人脸识别,下载数据集走得比较心累.很多数据集太大了.没有啥标签.先搞一个小的玩玩.还找到的是pgm灰度图.索性写了个小脚本,用来转换.同时写脚本打标签. 数据集地址:http://downlo ...
- IIS 中文文件名下载会出现403访问被拒绝
IIS 中文文件名下载会出现403访问被拒绝 服务器在安全加固后,出现了IIS 中文文件名下载会出现403访问被拒绝 换成英文的就好了
- [c#]一个窗体调用另一个窗体的事件
StuAddForm a = new StuAddForm(); a.IfStudent(textBox1.Text.Trim()):
- 使用web图标
http://www.lovelucy.info/demo/twitter-bootstrap-custom-icons/
- R常见的几种常见统计图
1,向日葵散点图 2,热图 (颜色越深,数值越大) 3,折线图(散点图),绘制散点图集用 paris(data.frame)
- EF外键关联
客户里面存在客服外键 基类模型 public class ModelBase { public ModelBase() { CreateTime = DateTime.Now; } [Key] pub ...