Socket.io: Namespaces, Kanäle & amp; co
Habe ich eine Node.js web-server, läuft ein socket-server auf der Oberseite, die erstellt wurde, mithilfe Socket.io. Im Grunde funktioniert dies.
Was ich jetzt erreichen möchte ist, dass die clients, die eine Verbindung Gliedern sich in Gruppen. So könnte es einige clients, die der Gruppe A und einigen anderen clients, die der Gruppe B. wählen Sie, zu welcher Gruppe Sie gehören, indem Sie auf eine bestimmte URL, entweder localhost:3000/A
oder localhost:3000/B
.
In-Buchse.io will ich jetzt zum senden von Nachrichten an alle clients in der Gruppe A oder für alle clients in der Gruppe B oder für alle Kunden, ohne einen Blick auf Ihre Gruppe.
Es ist im Grunde wie mit einem chat mit Zimmer, und Sie haben entweder Nachrichten für alle Kunden in einem bestimmten Raum, oder für jeden Kunden, egal in welchem Raum er sich befindet.
Was ist der beste Weg, um design solch ein system mit Sockel.io?
Ich versuche using namespace so weit, die im Grunde arbeitet für das erstellen von Gruppen A und B, aber dann verliere ich die Fähigkeit zum senden von Nachrichten an alle clients, egal in welchem Raum Sie sich befinden. Zumindest weiß ich nicht wie dies zu tun.
Wie soll ich dieses Modell? Was sind die richtigen Begriffe ich suchen soll?
UPDATE: Nach der Antwort von @sdedelbrockdie ich verwenden könnte namespace oder Zimmer:
- Wenn namespaces verwenden, ich bin nicht lange in der Lage zu senden, um alle, unabhängig von Ihrer namespace. Dies ist, weil
io.sockets
ist eine Verknüpfung zuio.of('')
die natürlich nicht mit dem namespace nicht mehr. - Dies bedeutet, dass ich verwenden soll, die Zimmer, aber ich Frage mich, was der semantische Unterschied zwischen einem Zimmer und einem namespace.
Kurz gesagt: Warum gibt es zwei Begriffe für die gleiche (?) Idee?
InformationsquelleAutor der Frage Golo Roden | 2012-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konnte man mit Zimmer, so dass Sie tun würde, das folgende zu emittieren, die für alle in einem Raum
Dann zu emittieren, um alle, die Sie verwenden können
Können Sie auch namespaces verwenden:
Ausstrahlen, zu jeder, außer der Benutzer ausgelöst hat, die Sie verwenden würden:
[edit] Hier ist eine ausführlichere Antwort:
Die Idee hinter dem Namen-Abstand ist, dass es behandelt wird, getrennt von den anderen namespaces (sogar global). Denken Sie an es, als ob es war ein ganz neues socket.io-Instanz, die Sie ausführen können, neue handshakes, frisch, events, Berechtigungen, etc., ohne die verschiedenen namespaces, die einander stören.
Dies wäre nützlich, um sagen
/chat
und/tracking
wo die Verbindung Veranstaltung haben sehr unterschiedliche LogikBuchse.io macht die ganze Arbeit für Sie, als wenn es zwei getrennte Instanzen, aber immer noch Grenzen, die Informationen zu einer Internet-Verbindung, die ist ziemlich schlau.
Gibt es vielleicht einen workaround, in dem Sie ausgestrahlt werden, um alle namespaces (Beispiel unten). Aber kurz gesagt, Sie sollten dies nicht tun, sollten Sie die Benutzung von Räumen.
InformationsquelleAutor der Antwort Sdedelbrock
Dies ist eine Vorlage, die Anwendung, die Sie verwenden können (funktioniert bei 9.16; nicht getestet, am 1.x aber es sollte funktionieren):
Könnten Sie schreiben, andere Griffe selbst 🙂
InformationsquelleAutor der Antwort Marwen Trabelsi