openlang

Как остановить сервер inets?

Здравствуйте,

У меня довольно простой вопрос об inets (который, кстати, очень удобен, поскольку не требует дополнительных зависимостей): как завершить запущенный «сервис» inets (скажем, в версии 28.4)?

Следующие попытки не удались:


Eshell V16.3 (press Ctrl+G to abort, type help(). for help)

(demo@nodebox)1> inets:start().
ok
(demo@nodebox)2> {ok,ServerPid} = inets:start( httpd,[{profile,cedar}, {port,8080}, {server_name,"maple"}, {server_root,"."}, {document_root,"."}, {bind_address,"127.0.0.1"}]).
{ok,<0.115.0>}
(demo@nodebox)3> inets:stop( httpd, ServerPid).
{error,not_found}
(demo@nodebox)4> inets:stop( httpd, cedar).
** exception error: no function clause matching httpd:stop_service(cedar) (httpd.erl:1278)
	 in function  inets:call_service/3 (inets.erl:558)
(demo@nodebox)5> inets:stop( httpd, "maple").
** exception error: no function clause matching httpd:stop_service("maple") (httpd.erl:1278)
	 in function  inets:call_service/3 (inets.erl:558)
(demo@nodebox)7> inets:services().
[{httpc,<0.111.0>},{httpd,<0.115.0>}]
(demo@nodebox)8> ServerPid.
<0.115.0>
(demo@nodebox)9> inets:services_info().
[{httpc,<0.111.0>,[{profile,default}]},
 {httpd,<0.115.0>,
		[{bind_address,{127,0,0,1}},
		 {host,"nodebox"},
		 {port,8080},
		 {server_name,"maple"}]}]

Может быть, в показанной выше записи httpd почему-то отсутствует {profile,cedar}?

Буду благодарен за подсказки, спасибо!

Tavin.

Переведено с английскогоПоказать оригинал

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    Здравствуйте,

    Для остановки сервиса httpd, запущенного с профилем, используется inets:stop(httpd, {BindAddress, Port, Profile})

    Если он запущен без профиля, можно воспользоваться inets:stop(httpd, {BindAddress, Port}) либо inets:stop(httpd, ServerPid)

    Я тоже ожидал бы увидеть имя профиля в inets:services_info(), хотя надо проверить, нет ли причины его отсутствия.

    С уважением,

    Mervin

    Переведено с английскогоПоказать оригинал
  2. Ссылка на ответ

    Большое спасибо, Mervin, inets:stop(httpd, {{127,0,0,1}, 8080, cedar}) делает ровно то, что нужно!

    Возможно, в inets — inets v9.6.2 (https://www.erlang.org/doc/apps/inets/inets.html#stop/2) стоит лучше объяснить тип “Reference :: pid (https://www.erlang.org/doc/apps/erts/erlang.html#t:pid/0)() | term (https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0)()” и подчеркнуть, что основная информация о серверах находится в httpd — inets v9.6.2 (https://www.erlang.org/doc/apps/inets/httpd.html) (а для клиентов аналогично в httpc — inets v9.6.2 (https://www.erlang.org/doc/apps/inets/httpc.html)).

    Ещё раз спасибо!

    Переведено с английскогоПоказать оригинал

Другие стороны того же вопроса

  1. Открытие файлов на Raspberry Pi 4

    На Raspberry Pi 4 я вызываю fopen в цикле for, чтобы читать файлы из определённого каталога, всего их больше 1200. После неко…

    Ответы 2Последняя активность c
  2. Резервирует ли Go сигналы SIGUSR1 и SIGUSR2?

    Уважаемые разработчики, мы хотим запускать приложение на go под dmtcp (на GitHub размещён dmtcp/dmtcp, проект распределённых…

    Ответы 2Последняя активность go