Erlang和cowboy的新手。我正在使用一些开放源代码,它使用cowboy并监听端口8080来提供一个ng-admin管理服务。我想知道牛仔是否有可能也监听端口80以提供用户界面。任何帮助和建议从哪里开始或任何代码片段将不胜感激。非常感谢!主控制中心
bfnvny8b1#
根据我对您的问题的理解,您希望有两个服务器运行在不同的端口上,您可以调用cowboy:start_clear/3两次,使用不同的端口和相同或不同的路由。这肯定是可行的,但如上所述,更建议使用名称空间路由来分隔应用程序(如/foo/123和/admin/foo/123),而不是使用不同的端口,如果它们使用相同的协议(在本例中为http)。如果您仍然需要两台服务器,它将类似于:
cowboy:start_clear/3
/foo/123
/admin/foo/123
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} }).
hof1towb2#
我对这个问题的理解是,你是否可以在同一个erlang VM中启动两个cowboy服务器。两个服务器监听两个不同的端口。是的,你可以做到这一点。基本上,当你调用cowboy:start_clear时,你编译它们自己的路由并绑定到8080和80端口。问题是这种做法是否有意义。我建议你是否可以使用路由来分隔两个应用程序,而不是在端口级别/单个Web服务器上。
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)希望这能帮助那些和我有同样问题的人。
3条答案
按热度按时间bfnvny8b1#
根据我对您的问题的理解,您希望有两个服务器运行在不同的端口上,您可以调用
cowboy:start_clear/3
两次,使用不同的端口和相同或不同的路由。这肯定是可行的,但如上所述,更建议使用名称空间路由来分隔应用程序(如/foo/123
和/admin/foo/123
),而不是使用不同的端口,如果它们使用相同的协议(在本例中为http)。如果您仍然需要两台服务器,它将类似于:hof1towb2#
我对这个问题的理解是,你是否可以在同一个erlang VM中启动两个cowboy服务器。两个服务器监听两个不同的端口。是的,你可以做到这一点。基本上,当你调用cowboy:start_clear时,你编译它们自己的路由并绑定到8080和80端口。
问题是这种做法是否有意义。我建议你是否可以使用路由来分隔两个应用程序,而不是在端口级别/单个Web服务器上。
px9o7tmv3#
谢谢你的例子。但不幸的是,因为是这个例子没有为我工作。
我不断收到服务“已经启动”的错误。我最终发现我必须为每个侦听器提供它自己唯一的名称。
cowboy:start_clear(3)
希望这能帮助那些和我有同样问题的人。