【问题标题】: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 参数。它有一堆有用的字段,例如hostport,以及一个请求标头列表(例如host,您可以从中构建websocket URL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 2017-02-27
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多