Elixir / Phoenix应用程序如何知道自己的websocket uri?

时间:2016-11-07 20:05:27

标签: websocket phoenix-framework

我开始使用带有Elm前端和Elixir / Phoenix后端的Web套接字。凤凰服务器需要告诉Elm应用程序要连接到哪个uri。 (例如,开发环境中的ws://localhost:4000/socket/websocket,但生产环境中的其他内容。)

我希望有相当于static_url的东西,但我找不到它。在那儿?

(我知道我可以对这些可能性进行硬编码,但看起来Phoenix似乎已经知道了它们。)

2 个答案:

答案 0 :(得分:0)

我真的认为Phoenix.Endpoint中有一个辅助功能,但我找不到任何东西。

可能有更好的解决方案,但我的快速反应是检查传递给任何Phoenix控制器的conn参数。它包含许多有用的字段,例如hostport,以及一个请求标头列表(例如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的末尾。