我目前正在凤凰城版本1.2.1和Elixir 1.4.1上编写即时消息服务器,并遇到涉及频道的问题。我用--no-html和--no-brunch启动了项目,如果这会影响任何东西。
当我尝试将此JSON字符串发送到服务器时:
{ "topic": "mailbox:tom"
, "event": "join"
, "payload": {"hello": "world"}
, "ref": 1234}
我从命令提示符处获取Ignoring unmatched topic "mailbox:tom" in InstantMessenger.UserSocket
。现在我的第一个想法是检查我的user_socket.ex文件但我写了channel "mailbox:*", InstantMessenger.MailboxChannel
根据文档应该匹配。我不知道在这一点上什么可能是错的,所以任何帮助都会受到赞赏。
我的endpoint.ex文件中的代码是:
socket "/socket" InstantMessenger.UserSocket
和我的user_socket.ex:
channel "mailbox:*", InstantMessenger.MailboxChannel
transport :websocket, Phoenix.Transports.WebSocket
def connect(params, socket) do
{:ok, assign(socket, :user_id, params["user_id"])}
end
def id(socket), do: "user_id#{socket.assigns.user_id}"
来自mailbox_channel.ex的join函数是
def join("mailbox:" <> user_id, payload, socket) do
if authorized?(paylload) && socket.assgns.user_id == user_id do
set_user_to_active(user_id)
{:ok, socket}
else
{:error, %{reason: "unauthorized"}}
end
end