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



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

我希望有什么东西相当于static_url,但我找不到它。是吗?

(我知道我可以硬编码的可能性,但似乎凤凰必须已经知道他们。)

通过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的末尾。

我真的认为Phoenix.Endpoint中会有一个辅助函数,但是我没有找到任何东西。

可能有一个更好的解决方案,但我的快速和肮脏的回应将是检查传递到任何Phoenix控制器的conn参数。它有一堆有用的字段,如hostport,和一个请求头列表(如host,从中你可以建立websocket URL。

相关内容

  • 没有找到相关文章