文档章节

开启cowboy的第一个程序

nao
 nao
发布于 2015/02/28 10:18
字数 1170
阅读 1148
收藏 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! 显示!

如下:

© 著作权归作者所有

共有 人打赏支持
nao

nao

粉丝 28
博文 152
码字总数 107883
作品 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
410
2
[翻译][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
543
1
模块化的http服务器--Cowboy

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

匿名
2012/06/24
2.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
0
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
21
5
centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部