我目前正在 Phoenix 版本 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 的加入函数是
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