Сообщение Erlang передается на глобальный gen_server

это продолжение предыдущего вопроса

У меня есть gen_server:

start(UserName) ->
    case gen_server:start({global, UserName}, player, [], []) of
    {ok, _} ->
        io:format("Player: " ++ UserName ++ " started");
    {error, Error} ->
        Error
    end
    ...

Как правильно отправить сообщение на этот gen_server. Например: в другом файле я делаю:

gen_server:cast(test, message).

В моем файле gen_server у меня есть:

handle_cast(message, State) ->
    io:format("Message receiving \r\n"),
    {noreply, State};

Я запускаю свой gen_server с тестовым именем:

сервер: запуск (тест). тест начался

когда я вызываю gen_server:cast(test, message)., в оболочке ничего не выводится. Как я могу проверить вызов handle_cast или нет?

Спасибо.


person 0xAX    schedule 20.04.2011    source источник
comment
Вместо использования распечаток, почему бы не использовать трассировку? aloiroberto.wordpress.com/2009/02/23/tracing-erlang -функции   -  person Roberto Aloi    schedule 20.04.2011


Ответы (1)


Вместо

gen_server:cast(test, message).

написать

gen_server:cast({global, test}, message).

Если вы регистрируете имя как {global, name}, вы должны называть его как {global, name}

Если ваш обработчик вызывается, он напечатает «Получение сообщения \r\n» в оболочке. Вы сделали это с помощью вызова io:format.

person Łukasz Milewski    schedule 20.04.2011
comment
Ну, на самом деле он просто вылетит — io:format принимает два аргумента. Кроме того, он будет распечатывать везде, где печатает его лидер группы, что может быть или не быть той оболочкой, в которой вы находитесь. - person archaelus; 20.04.2011
comment
есть функции io:format/1 и io:format/2, так что не вылетает. По крайней мере, не при вызове io:format. - person Łukasz Milewski; 21.04.2011
comment
Да, вы правы — io:format/1 будет работать нормально. У меня возникло бы искушение предложить использовать error_logger:info_msg/2 вместо io:format для такого рода вещей, поскольку вывод почти всегда идет куда-то полезно. Это не обязательно относится к простому вызову io:format. - person archaelus; 22.04.2011