如何删除凤凰城的交通路线?

时间:2016-05-13 16:08:02

标签: elixir phoenix-framework

我使用Phoenix Chat Room Example并且遇到路由问题。

user_socket.ex文件中:

defmodule Chat.UserSocket do
  use Phoenix.Socket

  channel "rooms:*", Chat.RoomChannel

  transport :websocket, Phoenix.Transports.WebSocket

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

  def id(_socket), do: nil
end

我遇到的问题是transport配置。

transport :websocket, Phoenix.Transports.Websocket

设置传输基本上就像一个目录。要通过此套接字进行连接,客户端必须在/websocket末尾URL。我试图优雅地删除它。我试图让我的websocket服务器被server:port访问,没有目录要求。

我发现从Chat.UserSocket调用lib/chat/endpoint.ex模块:

socket "/Balancer", Chat.UserSocket

这个socket还添加了另一个必需目录。因此,要连接到websocket服务器,您需要将/Balancer/websocket附加到网址。我试图删除该要求。我可以缩短单词,并使用B/W,但这似乎不直观。此外,我对Elixir / Phoenix相当新,所以我为这个草率的问题道歉。

1 个答案:

答案 0 :(得分:2)

为webockets提供单独的路径是个好主意。使用标准80或443端口Shall I use WebSocket on ports other than 80?

的原因有多种原因

默认情况下,java脚本中的套接字构造函数会添加websocket部分,但您可以轻松地分配您想要的任何内容:

socket.endPoint = "/ws"

在端点中,您可以在root上匹配:

socket "/", Chat.UserSocket

并在您需要使用的用户套接字中:

transport :ws, Phoenix.Transports.WebSocket

完全可以在JS方面使用“/”而不使用任何其他路径作为您的websocket的根目录,但如果您在此聊天示例中尝试它,您将看到请求在Chat.PageController.index上匹配。您可以尝试使用空原子进行传输:"",但它有点hacky并且可能无效,所以我会坚持/ws路径。