文档章节

开启cowboy的第一个程序

nao
 nao
发布于 2015/02/28 10:18
字数 1170
阅读 1120
收藏 2
点赞 0
评论 0

 开始:

         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
博文 147
码字总数 107499
作品 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 ⋅ 0

Cowboy 2.0.0 发布,模块化的 HTTP 服务器

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

ismdeep ⋅ 2017/10/05 ⋅ 2

[翻译][erlang]cowboy路由模块使用

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

技术小牛人 ⋅ 2017/11/09 ⋅ 0

erlang 语言编写的服务器cowboy 是如何获取请求对象 Req 的?

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

xiaoliuliu2050 ⋅ 2015/01/12 ⋅ 1

模块化的http服务器--Cowboy

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

匿名 ⋅ 2012/06/24 ⋅ 0

RabbitMQ 3.7.0 Milestone 1 发布

RabbitMQ 3.7.0 Milestone 1发布,此版本的更新内容如下: 服务器改进内容: Lager-based logging: pluggable backends, debug log level, more flexibility in configuration. RabbitMQ no......

oschina ⋅ 2016/01/14 ⋅ 1

Erlang REST框架--Leptus

Leptus 是一个运行于Cowboy框架之上的 Erlang REST框架。Leptus 的目的是让我们便捷地创建 RESTful API。 要求: Erlang/OTP R15B or newer cowboy jiffy or jsx msgpack 示例代码: -modul...

匿名 ⋅ 2016/03/02 ⋅ 0

[Erlang 0054] Erlang Web 监控工具

Erlang已经提供了一系列工具查看运行时状态查看的工具,有没有web的监控工具可用呢?下面介绍一个很棒的工具: BigWig 它提供了sasl日志查看,OTP进程树拓扑图,进程查看(可以按照指标排序),Appli...

唐玄奘 ⋅ 2017/12/03 ⋅ 0

Phoenix v1.1.2 发布,Elixir 的 Web 开发框架

Phoenix v1.1.2 发布,此版本更新内容如下: [Cowboy] Improve log report for errors from the UserSocket [ChannelTest] Add and [Router] Improve error messages when calling Router h......

oschina ⋅ 2016/01/10 ⋅ 1

android应用按home键再点应用图片重复启动

我的android程序启动之后按home键进入桌面,再点击应用图标启动,它又开启了一个新的程序....怎样避免重复启动的问题呢?确定是重复启动,不是第一个关闭再开启的.... 有木有大神帮我解答下啊~多...

DogTom ⋅ 2014/01/09 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 21分钟前 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 40分钟前 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 48分钟前 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 58分钟前 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部