【发布时间】:2017-07-27 17:34:27
【问题描述】:
经过 1 天的全面搜索,我没有找到如何通过 WebSocket javascript 类将事件发送到 Phoenix 频道的方法。
这是我的频道定义:
defmodule Test.GeneralRoomChannel do
use Test.Web, :channel
# Rejoins la room générale
def join("general_room:lobby", payload, socket) do
if authorized?(payload) do
{:ok, socket}
else
{:error, %{reason: "unauthorized"}}
end
end
def handle_in("send_msg", payload, socket) do
broadcast! socket, "send_msg", payload
{:noreply, socket}
end
# Add authorization logic here as required.
defp authorized?(_payload) do
true
end
end
我有这个连接加入频道
this.ws = new WebSocket('ws://x.x.x.x:4000/socket/websocket');
this.ws.onopen = () => {
this.ws.send(JSON.stringify({
"topic": "general_room:lobby",
"event": "phx_join",
"payload": {"username": "Peekmo"},
"ref": "lfskj"
}));
};
它适用于“加入”事件,但我不知道如何发送“send_msg”事件。当我这样做时:
this.ws.send(JSON.stringify({
"topic": "general_room:lobby",
"event": "send_msg",
"payload": {"body": this.state.text},
"ref": "sdkfml"
}));
Test.GeneralRoomChannel.handle_in/3 中没有函数子句匹配
我不明白为什么,而且由于我对 websockets 不是很满意,所以我有点迷茫。
【问题讨论】:
-
我已尽我所能回答您的帖子...请尝试在此处粘贴 elixir 给您的确切错误,以便我们进一步调查。
标签: websocket phoenix-framework