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

问题描述:

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

我希望有一些东西等于static_url,但我找不到它。在那儿?

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

+0

或者您可以从客户端获得主机... http://*.com/a/40482399/649830 – bbz

我真的觉得那里会是在Phoenix.Endpoint这个辅助函数,但我没有发现任何东西。

有可能有更好的解决方案,但我的快速和肮脏的反应将检查传递到任何凤凰控制器conn参数。它还包含了许多有用的领域,如hostport,和请求头的列表(如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的末尾