文档章节

开启cowboy的第一个程序

nao
 nao
发布于 2015/02/28 10:18
字数 1170
阅读 1174
收藏 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
博文 153
码字总数 108102
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

macOs-挂载能读写的NTFS硬盘

转自:https://nicklinyi.gitee.io/blog/2018/04/macOS-ntfs.html Mac本身是支持NTFS写入的,只是NTFS是微软开发,由于版权和技术细节原因,苹果不愿公开说自己支持NTFS写入,也是有自己以后...

北风刮的不认真了
29分钟前
2
0
Namespace 命名空间

命名空间可以定义为一种封装方式。 为了解决开发中库和程序中可重用类和方法问题: 1.解决 PHP内部方法类/方法/常量 或者第三方 类/方法/常量之间的命名冲突 2.能够简化为了防止命名冲突而给...

忙碌的小蜜蜂
32分钟前
1
0
CDH的坑之Deploy Client Configuration Failed

Deploy Client Configuration Failed 1.问题描述 当使用CDH增添spark服务的时候,出现了以下错误: Faile to deploy client configuration to the cluster. 具体如下图: 2.思路 网上查了...

星汉
32分钟前
2
0
java guava 集合的操作:交集、差集、并集

Guava:google的工程师利用传说中的“20%时间”开发的集合库,它是对jdk提供的扩展,提供了很多实用的类来简化代码。 开源地址:https://github.com/google/guava jar包下载:http://maven....

帅的不像男的
33分钟前
2
0
从八个层面比较分析 Java 8, RxJava, Reactor

响应式编程在单机环境下是否鸡肋? 结论是:没有结论,我觉得只能抱着怀疑的眼光审视这个问题了。另外还聊到了 RSocket 这个最近在 SpringOne 大会上比较火爆的响应式”新“网络协议,githu...

小刀爱编程
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部