Erlang Cowboy запускает два веб-сервера на одном компьютере, используя разные порты

Новичок в эрланге и ковбое. Я использую некоторый открытый исходный код, который использует cowboy и прослушивает порт 8080 для предоставления службы администрирования ng-admin.

Я хочу знать, возможно ли, чтобы ковбой также прослушивал порт 80, чтобы предоставить пользовательский интерфейс.

Мы будем очень признательны за любую помощь и предложения о том, с чего начать, или любые фрагменты кода.

Огромное спасибо,

ПДК


person mpc    schedule 07.05.2020    source источник
comment
Вы не предоставляете достаточно информации, чтобы воспроизвести проблему. Может быть, вы можете включить фрагменты открытого исходного кода, на который вы ссылаетесь, или ковбойский обработчик, или показать код erlang, который начинает прослушивать соединения. Вы документацию смотрели?   -  person kostas    schedule 08.05.2020
comment
У меня нет проблем. Мой вопрос больше о том, как лучше всего иметь ковбойский сервер с двумя разными портами 80 и 8080 с двумя разными интерфейсами. Пожалуйста, извините меня, поскольку моя терминология может быть неправильной, поскольку это все новое для меня. Спасибо за комментарий.   -  person mpc    schedule 10.05.2020


Ответы (2)


Насколько я понимаю ваш вопрос, вы хотите, чтобы 2 сервера работали на разных портах. Вы можете позвонить 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}
    }).
person codeadict    schedule 12.05.2020
comment
Спасибо за ответ. Ваш ответ работает хорошо. Спасибо. - person mpc; 19.05.2020
comment
Ничего страшного, рад, что вам помогло :) - person codeadict; 20.05.2020

Насколько я понимаю вопрос, можно ли запустить два ковбойских сервера на одной и той же виртуальной машине erlang. Два сервера слушают два разных порта. Да, вы можете это сделать. В основном вы компилируете собственные маршруты и привязываетесь к 8080 и 80 портам при вызове cowboy:start_clear.

Вопрос в том, имеет ли смысл эта практика. Я бы предложил, если вы можете использовать маршруты для разделения двух приложений, а не на уровне порта/отдельного веб-сервера.

person Ming L.    schedule 08.05.2020
comment
Спасибо. Я пытаюсь разделить два интерфейса, чтобы администратор оставался на порту 8080 в соответствии с исходным открытым исходным кодом, но новый уровень пользовательского интерфейса находится на порту 80. Сам не уверен, имеет ли это смысл. Спасибо за ответ. - person mpc; 10.05.2020