如何将 erlang 消息发送到 websocket 处理程序?

How to send an erlang message to a websocket handler?

我一直在研究 Erlang 中的 Cowboy websockets。

我的目标是将 websocket 帧发送到现有的 websocket 连接。 我在 Receiving Erlang messages 下找到文档说我可以发送一个 "Erlang message" 并且它将由 websocket_info/2.

处理

本文档中 "Sending an Erlang message" 是什么意思?

我试过类似的方法:

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}.

但这似乎没有任何作用。

如何为我的 websocket_info/2 发送 Erlang 消息来处理现有的 websocket 连接?

几分钟后,我发现我发送 self() ! "Msg" 太早了。

Cowboy websockets 也有一个函数 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