Penso che a questo punto il modo migliore sarebbe quello di inviare quei valori come parametri durante la connessione. Ciò significherebbe probabilmente ottenere le informazioni dallo Plug.Conn
e passarlo in qualche modo al tuo JS, o in qualche modo farlo tutto lato client.
In ogni caso, per metterlo nella presa da lì, faresti una di queste due cose.
sul lato JS a livello di socket:
var socket = new Socket("/socket", {ip: "127.0.0.1", host: "localhost"})
sul lato JS a livello del canale:
var channel = socket.channel("topic:subtopic", {ip: "127.0.0.1", host: "localhost"})
nel modulo zoccolo:
def connect(_params = %{"ip" => ip, "host" => host}, socket) do
socket =
socket
|> assign(:ip, ip)
|> assign(:host, host)
{:ok, socket}
end
o il tuo modulo di canale:
def join("topic:subtopic", _params = %{ip: ip, host: host}, socket) do
socket =
socket
|> assign(:ip, ip)
|> assign(:host, host)
{:noreply, socket}
end
Se avessi bisogno di queste informazioni per tutti i tuoi canali, avrebbe senso farlo a livello di socket. Sono abbastanza sicuro che in ogni caso finisca nell'oggetto socket, quindi se stai usando lo stesso socket per più canali, vedresti gli stessi assegnamenti.
Possibile duplicato di [come ottenere remote \ _ip dal socket in phoenix-framework?] (Http://stackoverflow.com/questions/33276202/how-to-get-remote-ip-from-socket-in- phoenix-quadro) – PatNowak