2017-12-11 3 views
0

Angenommen, es gibt einige Benutzer, sagen Sie 100. Jeder Benutzer hat, sagen wir, 100 Elemente und ein Prozentsatz von den Benutzern von anderen Benutzern geteilt. Jeder Gegenstand hat einen Namen.Wie man einen Phönix Kanal für Hunderten von Themen einrichten kann?

Also ... Was ich will ist, wenn ich den Namen von item1 von user1 bearbeiten, sollte es alle Benutzer aktualisieren, die item1 haben.

Ich habe bereits die erforderlichen Berechtigungen eingerichtet und REST API funktioniert über Controller.

Jetzt möchte ich Echtzeit-Updates implementieren und Kanäle in Phoenix sind die richtige Passform. Wenn ich einen Kanal mit Thema item:* habe, kann ich alle Elemente aller Benutzer berücksichtigen.

Also, wenn es ein user1 mit item1, item2, item3 ...., item100 gibt. Wie richte ich die Listener auf Javascript-Seite ein? Ich denke nicht, dass das der richtige Ansatz wäre?

Kann mir bitte jemand mit der Struktur helfen. Vielen Dank!

UPDATE: Wird der folgende Ansatz funktionieren?

forEach(function(items, val) { 

     var topic = "item:" + val 
     // Join the topic 
     var channel = socket.channel(topic, {}) 

     channel.join() 
      .receive("ok", data => { 
       console.log("Joined topic", topic) 
      }) 
      .receive("error", resp => { 
       console.log("Unable to join topic", topic) 
      }) 

     channel.on("name_changed", resp => { 
      console.log("name was changed of this item", resp); 
     }) 
    }); 
+0

Warum versuchst du es nicht und posten die Ergebnisse? Ich kann mir vorstellen, dass es nicht funktioniert, weil Sie bei jeder Iteration "Kanal" überschreiben, aber ... –

Antwort

0

(von @schrockwell auf #phoenix Kanal von Slack)

Machen Sie einen einzigen „item_updates“ Kanal, und dann Push-Nachrichten, um es wie {item_id: 1, changes: ...}

Und dann auf dem Server-Ende, Registrieren Sie einen ausgehenden Handler für diesen Kanal, damit der Benutzer nur Updates für Elemente erhält, zu deren Kenntnis er berechtigt ist.

(Ich denke, es sollte funktionieren. Gehen, um es bald zu testen.)

Verwandte Themen