Heim > Artikel > Web-Frontend > Erweiterte Kenntnisse in der Nutzung von Socket.IO in node.js_node.js
Im 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 befasst sich dieser Artikel weiterhin mit der erweiterten Verwendung von Socket.IO. Dieser Artikel beginnt mit Konfiguration, Räumen, Ereignissen usw. und stellt einige praktische APIs und Vorsichtsmaßnahmen in Socket.IO vor.
1. Konfiguration
Socket.IO bietet 4 Konfigurations-APIs: io.configure, io.set, io.enable, io.disable. Unter diesen legt io.set ein einzelnes Element fest, und io.enable und io.disable werden verwendet, um ein einzelnes Element in der booleschen Konfiguration festzulegen. Mit io.configure können Sie verschiedene Parameter für verschiedene Produktionsumgebungen (z. B. Entwicklung, Test usw.) konfigurieren. Im Folgenden werden verschiedene Konfigurationen von Socket.IO in Entwicklungs- und Release-Umgebungen definiert:
io.configure('development', function(){
io.enable('browser client etag');
io.set('log level', 1);
});
io.configure('release', function(){
io.set('transports', ['websocket']);
});
Im Folgenden sind einige häufig verwendete Konfigurationselemente aufgeführt. Spezifische Konfigurationsparameter finden Sie im offiziellen WIKI
1).transports (Standard ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']): Ein Array mit Kommunikationsmethodentypen. Socket.IO unterstützt eine Vielzahl von Möglichkeiten zur Online-Sofortkommunikation, z. B. Websocket, Polling usw. Mit dieser Konfiguration können Sie alternative Kommunikationsmethoden auswählen.
2).Protokollebene (Standard 3): Die niedrigste Ebene der Protokollausgabe, 0 ist Fehler, 1 ist Warnung, 2 ist Information, 3 ist Debug, die Standardeinstellung ist die Ausgabe aller Arten von Protokollen.
3).Heartbeat-Intervall (Standard 25 Sekunden): Der Client muss innerhalb dieses Zeitraums ein Heartbeat-Paket an den Server senden, um die Kommunikation aufrechtzuerhalten.
2. Raum
Room ist eine sehr nützliche Funktion von Socket.IO. Ein Raum entspricht der Bereitstellung eines Namensraums für bestimmte Clients. Alle Übertragungen und Kommunikationen im Raum wirken sich nicht auf Clients außerhalb des Raums aus.
Im Einführungskapitel wissen wir, dass socket.join('room name') vom Client zum Betreten des Raums und socket.leave('room name') zum Verlassen des Raums verwendet werden kann. Wenn der Client einen Raum betritt, kann er auf zwei Arten Nachrichten im Raum verbreiten:
///2. Übertragen Sie eine Veranstaltung in einen anderen Raum und alle Kunden in diesem Raum erhalten die Nachricht
//Hinweis: Im Vergleich zu oben ist hier die Ereignisübermittlung aus der Sicht des Servers
io.sockets.in('another room').emit('event_name', data);
//An alle Kunden übertragen
io.sockets.emit('event_name', data);
Zusätzlich zum Senden von Nachrichten an den Raum können Sie über die folgende API auch Rauminformationen abrufen.
//Holen Sie sich den Client in den jeweiligen Raum und geben Sie alle Socket-Instanzen in diesem Raum zurück
io.sockets.clients('bestimmter Raum')
//Rufen Sie die von diesem Socket eingegebenen Rauminformationen über socket.id ab
io.sockets.manager.roomClients[socket.id]
3. Veranstaltung
Socket.IO verfügt über einige integrierte Standardereignisse. Beim Entwerfen von Ereignissen sollten wir die Standardereignisnamen vermeiden und diese Standardereignisse flexibel verwenden.
Serverseitige Ereignisse:
1).io.sockets.on('connection', function(socket) {}): Wird nach erfolgreicher Socket-Verbindung ausgelöst und zur Initialisierung verwendet
socket.on('message', function(message, callback) {}): Dieses Ereignis wird ausgelöst, wenn der Client eine Nachricht über socket.send sendet. Die Nachricht ist die übertragene Nachricht und der Rückruf ist der Rückruf, der nach dem Empfang ausgeführt werden soll Nachricht
2).socket.on('anything', function(data) {}): Wird ausgelöst, wenn ein Ereignis empfangen wird
3).socket.on('disconnect', function() {}): Wird ausgelöst, wenn der Socket die Verbindung verliert (einschließlich Schließen des Browsers, aktives Trennen, Trennen der Verbindung usw. in jeder Verbindungstrennungssituation)
Kundenveranstaltungen:
1).connect: Verbindung erfolgreich
2).connecting: Verbinden
3).disconnect: Trennen
4).connect_failed:Verbindung fehlgeschlagen
5).error: Ein Fehler ist aufgetreten und kann nicht von anderen Ereignistypen
behandelt werden
6).message: Identisch mit serverseitigem Nachrichtenereignis
7).anything: Das Gleiche wie das serverseitige Anything-Ereignis
8).reconnect_failed: Wiederherstellung der Verbindung fehlgeschlagen
9).reconnect: Erfolgreiche erneute Verbindung
10).Wiederverbinden: Erneut verbinden
Hier müssen wir die Reihenfolge angeben, in der der Client-Socket eine Verbindung initiiert. Beim erstmaligen Herstellen einer Verbindung lautet die Ereignisauslösesequenz: Verbinden->verbinden; bei einem Verbindungsverlust lautet die Ereignisauslösendensequenz: Trennen->Wiederverbinden (möglicherweise mehrmals)->Verbinden->Wiederverbinden- > verbinden.
4. Autorisierung
1). Broadcast an alle Clients: socket.broadcast.emit('broadcast message');
2). Betreten Sie einen Raum (sehr einfach zu verwenden! Es entspricht einem Namensraum und kann an einen bestimmten Raum gesendet werden, ohne dass dies Auswirkungen auf Clients in anderen Räumen oder außerhalb des Raums hat): socket.join('your room name' );
3). Senden Sie eine Nachricht an einen Raum (der Absender kann die Nachricht nicht empfangen): socket.broadcast.to('your room name').emit('broadcast room message');
4). Senden Sie eine Nachricht an einen Raum (einschließlich des Senders, der die Nachricht empfangen kann) (diese API gehört zu io.sockets): io.sockets.in('another room name').emit('broadcast room message ' );
5). Erzwingen Sie die Verwendung der WebSocket-Kommunikation: (Client) socket.send('hi'), (Server) verwenden Sie socket.on('message', function(data){}) zum Empfangen.
Die Einführung in die erweiterte Verwendung von Socket.IO endet hier im Grunde. Persönlich bin ich der Meinung, dass diese grundlegenden APIs für den täglichen Gebrauch ausreichend sind, was auch die äußerst einfache und benutzerfreundliche Designphilosophie von Socket.IO widerspiegelt. Dieser Artikel ist nur eine Einführung. Wenn Sie auf Probleme stoßen, die in der tatsächlichen Anwendung nicht gelöst werden können, ist es besser, das offizielle detaillierte WIKI zu lesen.