So senden Sie eine Nachricht an bestimmte Sockets mit Phoenix

8

Ich habe einen Socket mit Verifizierung:

%Vor%

Und nach dem Verbindungssocket wie user:#id

benannt

Aus der Dokumentation kann ich das Ereignis disconnect senden Test.Endpoint.broadcast("users_socket:" <> user.id, "disconnect", %{})

Frage: Wie man ein benutzerdefiniertes Ereignis per user:#id an Socket sendet, sollte es wie eine Push-Benachrichtigung an einen bestimmten Socket sein.

Ich habe versucht, Test.Endpoint.broadcast "user:1", "new:msg", %{user: "SYSTEM", body: "iex"} , aber es funktioniert nicht, weil ich nicht "neu: msg" auf Socket hören kann.

    
user1156168 27.12.2015, 17:37
quelle

2 Antworten

2

Kopieren von Chris McCords Antwort aus dem Kommentar:

Sie tun es auf einem Kanal, den Sie beschrieben haben. Sie müssen nicht in join/3 überprüfen, wenn Sie bereits einen aktuellen Benutzer auf dem Socket in connect überprüft und zugewiesen haben. Überprüfen Sie socket.assigns.user_id gegenüber dem Raum, in dem sich der Benutzer befindet. Dann senden Sie in diesen Raum Endpoint.broadcast "rooms:1", "new_msg", %{user: "SYSTEM", body: "iex"}

(Antwort als Community-Wiki markieren, da ich die Rep-Punkte nicht möchte, wenn jemand entscheidet, dies zu verbessern. Es ist nicht meine Antwort :))

    
Onorio Catenacci 30.12.2015, 14:05
quelle
0
  

Danke für die Antwort. Wir arbeiten also nur auf "Raum" -Basen. Und mein   Quellen werden wie sein: def join ("user:" & lt; & id; uid, message, socket) mache es wenn   _uid == socket.assigns.user_id do {: ok, socket} else {: Fehler,% {Grund: "unauthorized"}} end end

Sie müssen die userId nicht erneut verifizieren, da Sie die Logik bereits in UserSocket # connect definiert haben. Wenn der Benutzer nicht authentifiziert ist, erhält er eine Nachricht, die er nicht autorisiert. Was Sie tun können, ist die userId zu überprüfen wenn der Benutzer die Berechtigung zum Anzeigen eines bestimmten Kanals für Beispiel hat

%Vor%     
allyraza 08.01.2016 12:09
quelle

Tags und Links