【问题标题】:How does an Elixir/Phoenix app know its own websocket uri?Elixir/Phoenix 应用程序如何知道自己的 websocket uri?
【发布时间】:2016-11-09 01:34:35
【问题描述】:
我开始使用带有 Elm 前端和 Elixir/Phoenix 后端的 Web 套接字。 Phoenix 服务器需要告诉 Elm 应用程序要连接的 uri。 (例如,ws://localhost:4000/socket/websocket 在开发环境中,但在生产环境中。)
我希望有类似 static_url 的东西,但我找不到。在那儿?
(我知道我可以对这些可能性进行硬编码,但看起来 Phoenix 肯定已经知道它们了。)
【问题讨论】:
标签:
websocket
phoenix-framework
【解决方案1】:
通过 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 的末尾。
【解决方案2】:
我真的认为Phoenix.Endpoint 中有一个帮助函数,但我没有找到任何东西。
可能有更好的解决方案,但我的快速反应是检查传递给任何 Phoenix 控制器的 conn 参数。它有一堆有用的字段,例如host 和port,以及一个请求标头列表(例如host,您可以从中构建websocket URL。