Как отправить сообщение erlang обработчику websocket? - PullRequest
0 голосов
/ 01 октября 2018

Я изучал веб-сокеты Cowboy в Эрланге.

Моя цель - отправить фрейм веб-сокета в существующее соединение с веб-сокетом.Я нашел документы в разделе Получение сообщений 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 надескриптор для существующего подключения к веб-сокету?

1 Ответ

0 голосов
/ 01 октября 2018

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

Ковбойские веб-розетки также имеют функцию 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.

...