文档章节

开启cowboy的第一个程序

nao
 nao
发布于 2015/02/28 10:18
字数 1170
阅读 1183
收藏 2

 开始:

         Erlang不仅是一门语言,而且是一个操作系统对于你的应用程序。Erlang developers 很少写standalone modules, 它写库或应用,然后把这些组织在一起叫做一个release。一个release包含Erlang VM plus 的所有应用程序需要运行的节点,因此他可以直接的推到生产。(也就是通常使用erlang写一些库和应用,然后把这些库和应用打包在一起发布,这个release中包含了所有需要的东西)

         本章引导你完成所有关于Cowboy 设置的步骤, 写你的第一个应用程序和产生你的第一个release. 本章的结束你应该知道所有:你需要推动你的第一个Cowboy应用程序产生。


引导程序:

我们准备使用erlang.mk 创建系统,它还提供了引导功能允许我们快速开始,而不必处理微小细节。

首先,为我们的引用创建一个路径。

然后我们需要下载erlang.mk, 使用如下命令或者手动下载它。

 wget https://raw.githubusercontent.com/ninenines/erlang.mk/master/erlang.mk

如果遇到无法建立SSL连接的问题可以使用下面的命令:

wget --no-check-certificate  https://raw.githubusercontent.com/ninenines/erlang.mk/master/erlang.mk

我们现在可以引导我们的应用程序。因为我们准备产生一个release, 同时我们可以引导它。

 make -f erlang.mk bootstrap bootstrap-rel

这个命令产生一个Makefile, 一个基本的应用程序,和 创建所需的发布文件版本。我们已经可以创建和启动这个release.如下所示:

$ make
...
$ ./_rel/hello_erlang_release/bin/hello_erlang_release console
...
(hello_erlang@127.0.0.1)1>

输入命令i(),查看运行的进程,包含一个叫做hello_erlang_sup的进程。这个supervisor就是我们的应用。

这个release 目前什么都没做,这一章的剩下部分我们将添加Cowboy作为一个依赖和写一个简单的”Hello world”处理。


Cowboy 设置:

添加cowboy作为依赖到你的应用程序,你需要修改两个文件:MakeFile和应用资源文件。

修改Makefile允许创建系统知道它需要fetch和编译Cowboy, 做这些,我们需要简单的添加一行到Makefile文件,如下所示:

修改应用资源文件,src/hello_erlang.app.src, 允许创建系统去知道他需要包含Cowboy在release中和自动启动它。这是一个不同的步骤,因为在开发环境中的需要一些依赖项。

我们简单的添加cowboyapplications列表,在stdlib的右边,不要忘记逗号分隔符。

你可能想要一个对应用程序的描述当你编写文件时。在description后面添加描述信息。

如果你现在运行make和开启releaseCowboy将被包含和自动开启。然而这些还不够,因为Cowboy默认什么都不做,我们仍然需要告诉Cowboy去监听连接。


监听连接:

我们将会做这些当我们的应用程序开启时。有两个步骤,第一,我们需要定义和编译dispatch列表,一个routes列表,Cowboy将会使用它映射请求去处理程序模块。然后我们告诉Cowboy去监听连接。

打开src/hello_erlang_app.erl文件,添加需要的代码到start/2函数,如下所示:

start(_Type, _Args) ->
    Dispatch = cowboy_router:compile([
        {'_', [{"/", hello_handler, []}]}
    ]),
    cowboy:start_http(my_http_listener, 100, [{port, 8080}],
        [{env, [{dispatch, Dispatch}]}]
    ),
    hello_erlang_sup:start_link().

Dispatch list routes一章详细说明。对于本教程,我们映射到路径/到处理模块hello_handler.

这个模块还没存在,我们仍然需要编写它。

如果你现在编译release 启动它和打开一个  http://localhost:8080 ,你将会得到一个错误,因为这个模块还不存在,任何其他的URL, http://localhost:8080/test, 将会是404错误。

如下所示:


处理请求:

Cowboy有不同特性的处理程序,包括 REST Websocket处理程序,对于本教程中我们将使用一个普通的HTTP处理程序。

首先,让我们从一个模板生成一个处理程序。

make new t=cowboy_http n=hello_handler

然后,你可以打开src/hello_handler.erl 文件和修改handle/2 函数,如下所示发送一回复。

handle(Req, State=#state{}) ->
        {ok, Req2} = cowboy_req:reply(200,[
                {<<"content-type">>, <<"text/plain">>}
                ],<<"hello world!">>, Req),
        {ok, Req2, State}.

上述代码内容是发送一个200 ok 回复,content-type 处理设置成text/plain 发送主体设置成 hello world!

如果你创建release, 启动它,打开 http://localhost8080 在你的浏览器中, 你将会得到一个 漂亮的 hello world! 显示!

如下:

© 著作权归作者所有

共有 人打赏支持
上一篇: HTTP报文
nao

nao

粉丝 28
博文 155
码字总数 108154
作品 0
成都
后端工程师
私信 提问
Cowboy的使用

使用rebar3创建erlang项目 修改rebar.config 创建conf文件夹 在conf下创建vm.args和sys.config文件 vm.args sys.config 修改src/test_cowboy.app.src 修改src/testcowboysup.erl 新建src/tes......

影狼
2017/12/22
8
0
Cowboy 2.0.0 发布,模块化的 HTTP 服务器

Cowboy 2.0.0 发布,Cowboy 是一个小巧快速的良好模块化的 HTTP Server 。其中良好的 clean module 使得我们可以扩展到多种网络协议之中,cowboy 自带的有 tcp 和 ssl ,而也有一些人提供了 ...

ismdeep
2017/10/05
560
2
Misultin, Mochiweb, Cowboy, NodeJS 及 Tornadoweb测评

有些读者可能知道,本人正是 Misultin 的作者。 Misultin 是一个轻量的 Erlang HTTP 服务器库。我对HTTP服务器很感兴趣,我花了大量时间来试用它们,还喜欢从不同角度来比较它们。 今天我将用...

我不叫大脸猫
2013/01/23
6.2K
16
[翻译][erlang]cowboy路由模块使用

Cowboy是基于Erlang实现的一个轻量级、快速、模块化的http web服务器。 本文官方原文:http://ninenines.eu/docs/en/cowboy/1.0/guide/routing/ 默认情况下,Cowboy不会做什么事情。 为了使C...

技术小牛人
2017/11/09
0
0
erlang 语言编写的服务器cowboy 是如何获取请求对象 Req 的?

cowboy 中可以对请求对象做好多处理, 但是我不知道, erlang 语言编写的服务器cowboy 是如何获取请求对象 Req 的?

xiaoliuliu2050
2015/01/12
572
1

没有更多内容

加载失败,请刷新页面

加载更多

MYSQL事务处理

INNODB 事务里,所有表引擎必须为INNODB,在非实务表上操作,不会警告,不会报错,但没有效果

关元
44分钟前
3
0
cmake 编译脚本

#!/bin/sh test -d build || mkdir -p build cd build cmake .. make

shzwork
今天
2
0
从零开始实现Vue简单的Toast插件

概述: 在前端项目中,有时会需要通知、提示一些信息给用户,尤其是在后台系统中,操作的正确与否,都需要给与用户一些信息。 1. 实例 在Vue组件的methods内,调用如下代码 `this``.$toast({...

前端小攻略
今天
1
0
yaf和yaconf

pecl install yafpecl install yaconf [yaf] yaf.environ = dev yaf.use_spl_autoload = On yaf.use_namespace = 1 [yaconf] yaconf.directory = /data/wwwroot/yaconf......

果树啊
今天
0
0
day01:shell基础(shell基础、alias及重定向)

1、shell基础介绍: shell是一个命令解释器,用于用户与机器的交互: 也支持特定的语法(逻辑判断,循环): 每个用户都有自己特定的shell:Centos7的shell是bash(bourne agin shell): shel...

芬野de博客
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部