In meinem vorherigen Blog -Beitrag Socket.io habe ich kurz die grundlegende Verwendung von Socket.io vorgestellt und eine einfache Chatroom -Demo erstellt. Basierend auf dem Einführungskapitel untersucht dieser Artikel weiterhin die erweiterte Verwendung von Socket.io. Dieser Artikel beginnt mit der Konfiguration, den Räumen, Ereignissen usw. und stellt einige praktische APIs und Vorsichtsmaßnahmen in Socket.io ein.
1. Konfiguration
Socket.io bietet 4 Konfigurations -APIs: io.configure, io.set, io.enable, io.disable. IO.SET legt das einzelne Element fest, und IO.Enable und IO.Disable werden verwendet, um die boolesche Konfiguration in einzelnen Elementen festzulegen. Mit IO.Configure können Sie verschiedene Parameter für verschiedene Produktionsumgebungen (wie Entwicklung, Test usw.) konfigurieren. Das Folgende definiert die verschiedenen Konfigurationen von Socket.io in zwei Umgebungen:
Die Codekopie lautet wie folgt:
var io = require ('socket.io'). Hören (80);
io.configure ('Entwicklung', function () {
io.enable ('Browser Client etag');
io.set ('log Level', 1);
});
io.configure ('release', function () {
io.set ('transports', ['webocket']);
});
Im Folgenden werden einige häufig verwendete Konfigurationselemente aufgeführt. Weitere Konfigurationsparameter finden Sie im offiziellen Wiki.
1) .Transports (default ['WebSocket', 'htmlFile', 'xhr-Polling', 'JSONP-Polling']): Ein Array mit Artikeln für Kommunikationsmethoden. Socket.io unterstützt eine Vielzahl von Möglichkeiten, um sofortige Online -Kommunikation wie WebSocket, Umfragen usw. zu realisieren. Mit dieser Konfiguration können Sie die Sicherungskommunikationsmethode selbst auswählen.
2) .log Level (Standard 3): Die niedrigste Ebene der Protokollausgabe, 0 ist Fehler, 1 ist warnt, 2 ist Info und 3 ist Debuggen, und alle Arten von Protokollen werden standardmäßig ausgegeben.
3) .Heartbeat Intervall (Standard 25 Sekunden): Das Sendungsintervall des Herzschlagpakets muss innerhalb dieses Zeitraums ein Herzschlagpaket an den Server senden, um die Kommunikation aufrechtzuerhalten.
2. Zimmer
Zimmer ist eine sehr nützliche Funktion von Socket.io. Der Raum ist gleichbedeutend mit der Bereitstellung eines Namespace für einige bestimmte Kunden, und alle Sendungen und Kommunikation im Raum betreffen keine Kunden außerhalb des Raumes.
In der Einführung wissen wir, dass Socket.join ('Raumname') zum Betreten des Raums vom Kunden verwendet werden kann, und Socket.leave ('Raumname') wird verwendet, um den Raum zu verlassen. Wenn der Kunde einen Raum betritt, kann die Nachricht auf zwei Arten im Raum übertragen werden:
Die Codekopie lautet wie folgt:
// 1. Senden Sie eine Veranstaltung in mein Zimmer, und der Einsender wird ausgeschlossen (dh wird keine Nachricht empfangen)
io.sockets.on ('Verbindung', Funktion (Socket) {
// HINWEIS: Im Vergleich zu den folgenden finden Sie hier Ereignisse aus der Sicht des Kunden ein
Socket.Broadcast.to ('My Room'). emit ('event_name', data);
}
// 2. Senden Sie eine Veranstaltung in einen anderen Raum, und alle Kunden in diesem Raum erhalten eine Nachricht
// HINWEIS: Im Vergleich zum oben genannten können Sie Ereignisse aus der Sicht des Servers einreichen
io.sockets.in ('ein anderer Raum'). emit ('event_name', data);
// an alle Kunden übertragen
io.sockets.emit ('event_name', data);
Zusätzlich zum Ausstrahlung von Nachrichten in den Raum können Sie auch Rauminformationen über die folgende API erhalten.
Die Codekopie lautet wie folgt:
// Informationen zu allen Räumen erhalten
// Schlüssel ist der Raumname, Wert ist das Socket -ID -Array, das dem Raumnamen entspricht
io.sockets.manager.rooms
// Holen Sie sich den Kunden in einem bestimmten Raum und geben Sie alle Socket -Instanzen in diesem Raum zurück
io.sockets.clients ('bestimmter Raum')
// Erhalten Sie die Rauminformationen,
io.sockets.Manager.roomClients [Socket.id]
3. Ereignisse
Socket.io hat einige integrierte Standard-Ereignisse. Beim Entwerfen von Ereignissen sollten wir die Standard -Ereignisnamen vermeiden und diese Standardereignisse flexibel verwenden.
Serverseitige Ereignisse:
1.
Socket.on ('Nachricht', Funktion (Nachricht, Rückruf) {}): Dieses Ereignis wird ausgelöst, wenn der Client eine Nachricht über Socket.Send überträgt. Die Nachricht ist die übertragene Nachricht. Rückruf ist der Rückruf, der nach Erhalt der Nachricht ausgeführt wird.
2) .Socket.on ('Anything', Funktion (Daten) {}): Entlassen, wenn ein Ereignis empfangen wird
3) .Socket.on ('Disconnect', Function () {}): Auslöser, wenn die Steckdose die Verbindung verliert (einschließlich einer Trennung Situationen wie dem Schließen des Browsers, der aktiven Trennung, des Trennens usw.).
Kundenereignisse:
1) .Connect: Die Verbindung ist erfolgreich
2) .Connecting: Verbinden
3) .Disconnect: Trennen
4) .Connect_Failed: Verbindung fehlgeschlagen
5) .Error: Es ist ein Fehler aufgetreten und kann nicht von anderen Ereignisarten verarbeitet werden.
6) .Message: Das gleiche serverseitige Nachrichtenereignis
7) .anle: Alles Ereignis auf demselben Server
8) .Reconnect_Failed: Wiederverbindung fehlgeschlagen
9) .Reconnect: erfolgreich wieder verbunden
10) .Reconnecting: Wiederverbinden
Hier müssen wir die Bestellung erwähnen, wenn der Client -Socket die Verbindung initiiert. Wenn die erste Verbindung verbunden ist, lautet die Ereignisauslöserreihenfolge: Connect-> Connect; Wenn die Verbindung verloren geht, lautet die Ereignisauslöserreihenfolge: Trennen-> Wiederverbinden (kann mehrmals durchgeführt werden)-> Verbinden-> Verbindung-> Connect-> Connect.
4. Autorisierung
1). Sendung an alle Kunden: Socket.Broadcast.Emit ('Broadcast Message');
2). Betreten Sie einen Raum (sehr einfach zu bedienen! Es entspricht einem Namespace, der in einen bestimmten Raum übertragen werden kann, ohne Kunden in anderen Räumen oder nicht im Raum zu betreffen): Socket.Join ('dein Zimmername');
3). Broadcast -Nachricht an einen Raum (der Absender kann die Nachricht nicht empfangen): Socket.Broadcast.to ('dein Zimmername'). Emit ('Broadcast Room Message');
4). Broadcast -Nachrichten an einen Raum (einschließlich Absender kann Nachrichten empfangen) (diese API gehört zu IO.Sockets): io.sockets.in ('ein anderer Raumname').
5). Force WebSocket -Kommunikation: (Client) socket.send ('hi'), (Server) Verwenden Sie Socket.on ('Nachricht', Funktion (Daten) {}), um zu empfangen.
Dies ist im Grunde die Einführung in die fortgeschrittene Verwendung von Socket.io. Ich persönlich bin der Meinung, dass diese grundlegenden APIs im täglichen Gebrauch ausreichen, was auch Socket.IOs extrem einfache und benutzerfreundliche Designphilosophie widerspiegelt. Dieser Artikel ist nur eine Möglichkeit, Aufmerksamkeit zu erregen. Bei Problemen, die bei der tatsächlichen Verwendung nicht gelöst werden können, ist es besser, das offizielle detaillierte Wiki zu überprüfen.