Erlang Cowboy使用不同的端口在一台机器上运行两个Web服务器

zsohkypk  于 2022-12-08  发布在  Erlang
关注(0)|答案(3)|浏览(237)

Erlang和cowboy的新手。我正在使用一些开放源代码,它使用cowboy并监听端口8080来提供一个ng-admin管理服务。
我想知道牛仔是否有可能也监听端口80以提供用户界面。
任何帮助和建议从哪里开始或任何代码片段将不胜感激。
非常感谢!
主控制中心

bfnvny8b

bfnvny8b1#

根据我对您的问题的理解,您希望有两个服务器运行在不同的端口上,您可以调用cowboy:start_clear/3两次,使用不同的端口和相同或不同的路由。这肯定是可行的,但如上所述,更建议使用名称空间路由来分隔应用程序(如/foo/123/admin/foo/123),而不是使用不同的端口,如果它们使用相同的协议(在本例中为http)。如果您仍然需要两台服务器,它将类似于:

NormalRoutes = cowboy_router:compile(...),
    AdminRoutes = cowboy_router:compile(...),
    {ok, _} = cowboy:start_clear(http, [{port, 80}], #{
      env => #{dispatch => NormalRoutes}
    }),
    {ok, _} = cowboy:start_clear(http, [{port, 8080}], #{
      env => #{dispatch => AdminRoutes}
    }).
hof1towb

hof1towb2#

我对这个问题的理解是,你是否可以在同一个erlang VM中启动两个cowboy服务器。两个服务器监听两个不同的端口。是的,你可以做到这一点。基本上,当你调用cowboy:start_clear时,你编译它们自己的路由并绑定到8080和80端口。
问题是这种做法是否有意义。我建议你是否可以使用路由来分隔两个应用程序,而不是在端口级别/单个Web服务器上。

px9o7tmv

px9o7tmv3#

谢谢你的例子。但不幸的是,因为是这个例子没有为我工作。
我不断收到服务“已经启动”的错误。我最终发现我必须为每个侦听器提供它自己唯一的名称。

NormalRoutes = cowboy_router:compile(...),
    AdminRoutes = cowboy_router:compile(...),
    {ok, _} = cowboy:start_clear(http_listener_name_1, [{port, 80}], #{
      env => #{dispatch => NormalRoutes}
    }),
    {ok, _} = cowboy:start_clear(http_listener_name_2, [{port, 8080}], #{
      env => #{dispatch => AdminRoutes}
    }).

cowboy:start_clear(3)
希望这能帮助那些和我有同样问题的人。

相关问题