我开始使用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
参数。它有一堆有用的字段,如host
和port
,和一个请求头列表(如host
,从中你可以建立websocket URL。