凤凰城赢得了与主题无关的主题

时间:2017-04-15 02:07:46

标签: elixir phoenix-framework phoenix-channels

我目前正在凤凰城版本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

0 个答案:

没有答案