2016-11-07 64 views
0

我開始使用帶有Elm前端和Elixir/Phoenix後端的web套接字。 Phoenix服務器需要告訴Elm應用程序要連接哪些uri。 (例如,ws://localhost:4000/socket/websocket在開發環境中,但在生產環境中有其他東西)。Elixir/Phoenix應用程序如何知道自己的websocket uri?

我希望有一些東西等於static_url,但我找不到它。在那兒?

(我知道我可以硬編碼的可能性,但它似乎像鳳凰必須已經知道他們。)

+0

或者您可以從客戶端獲得主機... http://stackoverflow.com/a/40482399/649830 – bbz

回答

0

我真的覺得那裏會是在Phoenix.Endpoint這個輔助函數,但我沒有發現任何東西。

有可能有更好的解決方案,但我的快速和骯髒的反應將檢查傳遞到任何鳳凰控制器conn參數。它還包含了許多有用的領域,如hostport,和請求頭的列表(如host,從中你可以建立WebSocket的URL。

0

的一種方式,通過克里斯·麥考德,就是要改變這一行YourApp.Endpoint

socket "/socket", Eecrit.UserSocket 

...這個:

@socket_mount "/socket" 
def socket_uri() do 
    ws_url = String.replace_leading(url(), "http:", "ws:") 
    ws_url <> @socket_mount 
end 

socket @socket_mount, Eecrit.UserSocket 

注意,這需要客戶端傳輸/websocket添加到URI的末尾

相關問題