当前位置: 首页 > 工具软件 > Cowboy > 使用案例 >

Cowboy 用户指南 (四) - Getting started

侯和惬
2023-12-01

入门指南

Erlang不仅仅是一种语言,它还是应用程序的操作系统。Erlang开发人员很少编写独立的模块,他们编写库或应用程序,然后将它们捆绑到所谓的发布中。发布版包含Erlang VM以及运行该节点所需的所有应用程序,因此可以直接将其push到生产环境。

本章将带领您完成设置Cowboy、编写第一个应用程序和生成第一个发行版的所有步骤。在本章的最后,你应该知道将你的第一个Cowboy应用push到产品所需的一切。

预备知识

我们将使用Erlang.mk构建系统。如果您正在使用Windows,请阅读安装说明Installation instructions,以获得您的环境设置,然后再继续。

引导

首先,让我们为应用程序创建目录。

$ mkdir hello_erlang
$ cd hello_erlang

那我们需要下载erlang.mk。使用下面的命令或手动下载它。

$ wget https://erlang.mk/erlang.mk

现在我们可以引导应用程序。因为我们将要生成一个版本,所以我们也将同时引导它。

$ make -f erlang.mk bootstrap bootstrap-rel

这将创建一个Makefile、一个基础的application,以及创建发布所必需的发布文件。我们已经可以构建并启动这个版本了。

$ make run
...
(hello_erlang@127.0.0.1)1>

输入命令i()。将显示正在运行的进程的相关信息,包括一个名为hello_erlang_sup的进程。这是我们申请的supervisor

这个版本目前什么都不做。在本章的其余部分,我们将添加Cowboy作为一个依赖项,并编写一个简单的“Hello world!”处理器。

Cowboy 设置

我们将修改Makefile来告诉构建系统它需要获取和编译Cowboy:

PROJECT = hello_erlang

DEPS = cowboy
dep_cowboy_commit = 2.8.0

DEP_PLUGINS = cowboy

include erlang.mk

DEP_PLUGINS行告诉构建系统加载Cowboy提供的插件。其中包括我们即将使用的预定义模板。

如果你现在make run,Cowboy将会包含在版本中并自动启动。然而,这还不够,因为Cowboy默认不会做任何事情。我们还是得让Cowboy 监听连接

监听连接

首先,我们定义Cowboy 将使用的路由来将请求映射到处理程序模块,然后启动监听器。这最好在应用程序启动时完成。

打开 src/hello_erlang_app.erl文件,并在start/2函数中添加必要的代码,使其看起来像这样:

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

路由将在Routing章节中详细解释。在本教程中,我们将 "路径/" 映射到处理程序模块hello_handler。这个模块还不存在。

构建并启动发行版,然后在浏览器中打开http://localhost:8080。您将得到一个500的错误,因为模块找不到。打开任何其他URL,如http://localhost:8080/test,都会导致404错误。

请求处理

Cowboy提供不同类型的处理程序,包括REST和Websocket处理程序。在本教程中,我们将使用普通的HTTP处理程序。

从模板生成一个处理程序:

$ make new t=cowboy.http n=hello_handler

然后,打开src/hello_handler.erl文件,并像这样修改init/2函数来发送回复。

init(Req0, State) ->
    Req = cowboy_req:reply(200,
        #{<<"content-type">> => <<"text/plain">>},
        <<"Hello Erlang!">>,
        Req0),
    {ok, Req, State}.

上面的代码所做的是发送一个200 OK回复,内容类型头设置为text/plain,响应主体设置为Hello Erlang!

如果你运行发行版并在浏览器中打开http://localhost:8080,你应该会看到一个漂亮的Hello Erlang!

 类似资料: