erlang сервер на порту 6657?

Проблема: я пытаюсь выполнить команду noshell следующим образом и сохранить сервер на порту 6657, но, похоже, это не работает.

run_server.sh

erl -make
erl -pa ebin/ -noshell -s server main 6657 -s init stop

Функция модуля Erlang

main(Port) ->
    controller:start(),

К вашему сведению, по приглашению erlang я могу выполнить команду - server:main(6667) это отлично работает

Подскажите, пожалуйста, что мне нужно изменить в этой команде?

Спасибо вам!

1 ответ

Предполагая, что у вас есть правильное имя модуля (вы говорите, server в первом фрагменте и chat_server позже), проблема, скорее всего, заключается в том, что -s module function arg1 [...] отправляет аргументы в виде списка атомов, в то время как ваш код требует одного целого числа (как вы сказали server:main(6657) работает). Ты можешь использовать -eval вместо -s:

erl -pa ebin/ -noshell -eval "server:main(6657)" -s init stop
$ cat a.erl
-module(a).
-compile(export_all).

main(Port) ->
  io:format("~p~n", [Port]).
$ erlc a.erl
$ erl -noshell -pa . -s a main 6657 -s init stop
['6657']
$ erl -noshell -pa . -eval 'a:main(6657)' -s init stop
6657
Другие вопросы по тегам