【问题标题】:Unable to connect to web socket in Phoenix: Ignoring unmatched topic. But I think it matches无法连接到 Phoenix 中的 Web 套接字:忽略不匹配的主题。但我认为它匹配
【发布时间】:2019-01-12 17:56:38
【问题描述】:

我是 Phoenix 和网络套接字的新手。我正在尝试使用 Web Sockets 创建一个应用程序,但 Phoenix 说 Ignoring unmatched topic "analysis:dn-ds.axin2" in Protsci.UserSocket。我想我有适合这类主题的处理程序,所以我不明白问题出在哪里。我错过了 Phoenix 应用程序中的某些内容吗?或者它可以在客户端上?这是我的设置:

# web/ |
# -----| user_socket.ex
# -----| analysis_channel.ex

# user_socket.ex
defmodule Protsci.UserSocket do
  use Phoenix.Socket

  channel "analysis:*", Protsci.AnalysisChannel

  transport :websocket, Phoenix.Transports.WebSocket

  def connect(_params, socket) do
    {:ok, socket}
  end

  def id(_socket), do: nil
end

# analysis_channel.ex
defmodule Protsci.AnalysisChannel do
  use Phoenix.Channel
  require Logger

  def join("analysis:" <> topic, _message, socket) do
    Logger.info "Join"
    case String.split(topic, ".") do
      [analysis, protein] ->
        reply = %{ :received => :message, :analysis => analysis, :protein => protein }
        {:ok, reply, socket}
      _ ->
        reply = %{ :error => "Unmatched topic", :msg => :topic }
        {:ok, reply, socket}
    end

  end

  def handle_in(
    analysis,
    %{"x" => x, "y" => y, "z" => z},
    socket
    ) do
    Logger.info "in"
    broadcast! socket, :analysis, %{body: x + y + z}
    {:noreply, socket}
  end

  def handle_in("new:msg", _msg, socket) do
    broadcast! socket, :type, %{body: "Unknow message type"}
    {:noreply, socket}
  end

  def handle_in("analysis:" <> topic, _msg, socket) do
    broadcast! socket, topic, %{body: "Unknow message type"}
    {:noreply, socket}
  end

end

【问题讨论】:

  • 我读过一些叫做竞争条件的东西,这是一个客户问题。这可能是错误的原因吗?我的服务器设置好吗?我在客户端使用库,所以我不知道幕后发生了什么。

标签: websocket elixir phoenix


【解决方案1】:

问题是因为我在发送消息之前没有加入频道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 2019-01-25
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多