我开始使用带有Elm前端和Elixir / Phoenix后端的Web套接字。凤凰服务器需要告诉Elm应用程序要连接到哪个uri。 (例如,开发环境中的ws://localhost:4000/socket/websocket
,但生产环境中的其他内容。)
我希望有相当于static_url
的东西,但我找不到它。在那儿?
(我知道我可以对这些可能性进行硬编码,但看起来Phoenix似乎已经知道了它们。)
答案 0 :(得分:0)
我真的认为Phoenix.Endpoint
中有一个辅助功能,但我找不到任何东西。
可能有更好的解决方案,但我的快速反应是检查传递给任何Phoenix控制器的conn
参数。它包含许多有用的字段,例如host
和port
,以及一个请求标头列表(例如host
),您可以从中构建websocket URL。
答案 1 :(得分:0)
通过Chris McCord的一种方法是改变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的末尾。