Я реализовал gen_server и supervisor: test_server
и test_sup
. Я хочу протестировать их из оболочки / CLI. Я написал их start_link
функции так, чтобы их имена регистрировались локально.
Я обнаружил, что могу просто создать test_server
из командной строки, но созданный test_sup
вообще не позволяет мне взаимодействовать с сервером.
Например, я могу создать test_server
, выполнив:
1> spawn(test_server, start_link, []).
<0.39.0>
2> registered().
[...,test_server,...]
Я могу взаимодействовать с сервером, и все в порядке.
Однако, если я попытаюсь проделать то же самое с test_sup
, в моем «процессе CLI» (с использованием registered/0
) новые имена / идентификаторы не будут зарегистрированы. Мой test_server
, похоже, был создан, но я не могу с ним взаимодействовать (см. Комментарий Лукаса Ларссона о SASL, чтобы понять, почему это правда).
Я предполагаю, что я закодировал ошибку в моем супервизоре, но этот метод запуска моего супервизора работает отлично:
1> {ok, Pid}= test_sup:start_link([]).
{ok, <0.39.0>}
2> unlink(Pid).
true
3> registered().
[...,test_server,test_sup,...]
Почему я могу создать gen_server, но не супервизор?
Обновить
Код, который я использую, можно найти в этом сообщении. Я использую echo_server
и echo_sup
, два очень простых модуля.
Учитывая этот код, это работает:
spawn(echo_server, start_link, []).
а это не так:
spawn(echo_sup, start_link, []).