2016-05-13 53 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路徑。