Elixir/Phoenix应用程序如何知道自己的websocket uri?
问题描述:
我开始使用带有Elm前端和Elixir/Phoenix后端的web套接字。 Phoenix服务器需要告诉Elm应用程序要连接哪些uri。 (例如,ws://localhost:4000/socket/websocket
在开发环境中,但在生产环境中有其他东西)。Elixir/Phoenix应用程序如何知道自己的websocket uri?
我希望有一些东西等于static_url
,但我找不到它。在那儿?
(我知道我可以硬编码的可能性,但它似乎像凤凰必须已经知道他们。)
答
我真的觉得那里会是在Phoenix.Endpoint
这个辅助函数,但我没有发现任何东西。
有可能有更好的解决方案,但我的快速和肮脏的反应将检查传递到任何凤凰控制器conn
参数。它还包含了许多有用的领域,如host
和port
,和请求头的列表(如host
,从中你可以建立WebSocket的URL。
答
的一种方式,通过克里斯·麦考德,就是要改变这一行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的末尾
或者您可以从客户端获得主机... http://*.com/a/40482399/649830 – bbz