https://ninenines.eu/docs/en/cowboy/2.8/guide/getting_started/
Cowboy是由Erlang编写的轻量、快速以及模块化的Http服务器。支持HTTP/1.1、HTTP/2和WebSocket。
Cowboy简单实例
- 创建项目目录hello_erlang。
$ mkdir hello_erlang
$ cd hello_erlang
- 下载Erlang.mk,并创建Makefile,Makefile用于构建应用程序。
$ wget https://erlang.mk/erlang.mk
$ make -f erlang.mk bootstrap bootstrap-rel
- 构建并运行应用程序。
$ make run
- 输入命令
i().
会看到当前正在运行的进程,包含一个名为hello_erlang_sup
的进程,它是当前应用程序的监控进程。
此时,该应用程序什么事也没有做。接下来,我们将引入cowboy,并编写一个简单的“Hello World”处理器。
- 修改Makefile如下,这样再次使用命令
make
构建应用程序时就会自动引入并编译cowboy及其插件。
PROJECT = hello_erlang
DEPS = cowboy
dep_cowboy_commit = 2.8.0
DEP_PLUGINS = cowboy
include erlang.mk
- 打开
src/hello_erlang_sup.erl
,修改如下:
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().
在这里定义了一个映射请求至处理模块的路由,在这里是将请求路径为/
的请求映射到模块hello_handler
去处理。另外,开启了监听器监听8080端口的请求。
- 创建处理模块
hello_handle.erl
,并修改如下。
$ make new t=cowboy.http n=hello_handler
init(Req0, State) ->
Req = cowboy_req:reply(200,
#{<<"content-type">> => <<"text/plain">>},
<<"Hello World!">>,
Req0),
{ok, Req, State}.
- 重新编译运行后,打开http://localhost:8080,就可以看到
Hello World!
啦。