Как отправить сообщение erlang обработчику веб-сокета?

Я искал веб-сокеты Cowboy в Erlang.

Моя цель - отправить фрейм веб-сокета в существующее подключение к веб-сокету. Я нашел документы в разделе Получение сообщений Erlang, в которых говорится, что я могу отправьте «сообщение Erlang», и оно будет обработано websocket_info/2.

Что означает эта документация под «отправкой сообщения Erlang»?

Я пробовал что-то вроде:

init(Req, State) ->
  Self = self(),
  spawn(fun() ->
    timer:sleep(2000),
    Self ! "Hoii"
  end),
  {cowboy_websocket, Req, State}.

websocket_info(_Info, State) ->
  io:fwrite("Info received\n"),
  {ok, State}.

Но, похоже, это ничего не дает.

Как я могу отправить сообщение Erlang для моего websocket_info/2 для обработки существующего подключения к веб-сокету?


person Acidic9    schedule 01.10.2018    source источник


Ответы (1)


Спустя всего несколько минут я понял, что просто отправляю self() ! "Msg" слишком рано.

Веб-сокеты Cowboy также имеют функцию websocket_init/1, и, переместив свой код в эту функцию, я смог получить сообщение websocket_info/2.

websocket_init(State) ->
  Self = self(),
  spawn(fun() ->
    timer:sleep(2000),
    Self ! "Hoii"
  end),
  {ok, State}.

websocket_info(_Info, State) ->
  io:fwrite("Info received\n"),
  {ok, State}.

Обратите внимание, что сообщение теперь отправляется функцией websocket_init/1, а не просто init/2.

person Acidic9    schedule 01.10.2018