2016-05-13 49 views
0

我使用的是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

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


我发现Chat.UserSocket模块从lib/chat/endpoint.ex称为:

socket "/Balancer", Chat.UserSocket

socket也增加另一个必需的目录。因此,要连接到websocket服务器,您需要将/Balancer/websocket附加到URL。我正在尝试删除该要求。我可以缩短这个词,并使用B/W,但这看起来很不直观。另外,我对Elixir/Phoenix相当陌生,所以我对这个草率的问题表示歉意。

回答

2

这是一个好主意,有一个单独的路径为您的websockets。有几个原因,最好是使用标准的80个或443端口Shall I use WebSocket on ports other than 80?

通过Java脚本默认套接字构造函数添加websocket一部分,但是你可以很容易地指定任何你想要的是这样的:

socket.endPoint = "/ws" 

在端点,那么你可以匹配根:

socket "/", Chat.UserSocket 

,并在用户的插座,你需要使用:

transport :ws, Phoenix.Transports.WebSocket 

完全可以在JS端使用没有任何其他路径的“/”作为websocket的根,但是如果您在此聊天示例中尝试它,您会看到请求匹配Chat.PageController.index。您可以尝试使用空原子进行运输:"",但它有点冒险,可能无法正常工作,所以我会坚持使用/ws路径。