我開始使用帶有Elm前端和Elixir/Phoenix後端的web套接字。 Phoenix服務器需要告訴Elm應用程序要連接哪些uri。 (例如,ws://localhost:4000/socket/websocket
在開發環境中,但在生產環境中有其他東西)。Elixir/Phoenix應用程序如何知道自己的websocket uri?
我希望有一些東西等於static_url
,但我找不到它。在那兒?
(我知道我可以硬編碼的可能性,但它似乎像鳳凰必須已經知道他們。)
我開始使用帶有Elm前端和Elixir/Phoenix後端的web套接字。 Phoenix服務器需要告訴Elm應用程序要連接哪些uri。 (例如,ws://localhost:4000/socket/websocket
在開發環境中,但在生產環境中有其他東西)。Elixir/Phoenix應用程序如何知道自己的websocket uri?
我希望有一些東西等於static_url
,但我找不到它。在那兒?
(我知道我可以硬編碼的可能性,但它似乎像鳳凰必須已經知道他們。)
我真的覺得那裏會是在Phoenix.Endpoint
這個輔助函數,但我沒有發現任何東西。
有可能有更好的解決方案,但我的快速和骯髒的反應將檢查傳遞到任何鳳凰控制器conn
參數。它還包含了許多有用的領域,如host
和port
,和請求頭的列表(如host
,從中你可以建立WebSocket的URL。
的一種方式,通過克里斯·麥考德,就是要改變這一行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的末尾
或者您可以從客戶端獲得主機... http://stackoverflow.com/a/40482399/649830 – bbz