Maison  >  Article  >  interface Web  >  Compétences avancées d'utilisation de Socket.IO dans node.js_node.js

Compétences avancées d'utilisation de Socket.IO dans node.js_node.js

WBOY
WBOYoriginal
2016-05-16 16:31:581362parcourir

Dans le billet de blog précédent Socket.IO, j'ai brièvement présenté l'utilisation de base de Socket.IO et créé une simple DEMO de salle de discussion. Basé sur le chapitre d'introduction, cet article continue d'explorer l'utilisation avancée de Socket.IO. Cet article commencera par la configuration, les salles, les événements, etc., et présentera quelques API et précautions pratiques dans Socket.IO.

1.Configuration

Socket.IO fournit 4 API de configuration : io.configure, io.set, io.enable, io.disable. Parmi eux, io.set définit un seul élément, et io.enable et io.disable sont utilisés pour définir un seul élément dans la configuration booléenne. io.configure vous permet de configurer différents paramètres pour différents environnements de production (tels que développement, test, etc.). Ce qui suit définit différentes configurations de Socket.IO dans les environnements de développement et de publication :

Copier le code Le code est le suivant :

var io = require('socket.io').listen(80);

io.configure('development', function(){
​ io.enable('étiquette client du navigateur');
​ io.set('niveau de journalisation', 1);
});

io.configure('release', function(){
​ io.set('transports', ['websocket']);
});

Ce qui suit répertorie certains éléments de configuration couramment utilisés. Pour les paramètres de configuration spécifiques, veuillez vous référer au WIKI officiel

.

1).transports (default ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']) : Un tableau contenant les types de méthodes de communication. Socket.IO prend en charge diverses méthodes pour établir une communication instantanée en ligne, telles que Websocket, sondage, etc. Cette configuration vous permet de choisir des méthodes de communication alternatives.
2).niveau de journal (3 par défaut) : le niveau le plus bas de sortie du journal, 0 est une erreur, 1 est un avertissement, 2 est une information, 3 est un débogage, la valeur par défaut est de générer tous les types de journaux.
3).Intervalle de battement de cœur (25 secondes par défaut) : intervalle d'envoi du paquet de battement de cœur. Le client doit envoyer un paquet de battement de cœur au serveur pendant cette période pour maintenir la communication.

2. Chambre

Room est une fonction très utile fournie par Socket.IO. Une salle équivaut à fournir un espace de noms pour certains clients spécifiés. Toutes les diffusions et communications dans la salle n'affecteront pas les clients en dehors de la salle.

Dans le chapitre d'introduction, nous savons que socket.join('room name') peut être utilisé par le client pour entrer dans la pièce, et socket.leave('room name') peut être utilisé pour quitter la pièce. Lorsque le client entre dans une salle, il peut diffuser des messages dans la salle des deux manières suivantes :

Copier le code Le code est le suivant :

//1. Diffusez un événement dans ma salle et l'émetteur sera exclu (c'est-à-dire que le message ne sera pas reçu)
io.sockets.on('connexion', fonction (socket) {
//Remarque : Par rapport à ce qui suit, voici la soumission de l'événement du point de vue du client
socket.broadcast.to('ma chambre').emit('event_name', data);
>

///2. Diffusez un événement dans une autre salle, et tous les clients de cette salle recevront le message
//Remarque : par rapport à ce qui précède, voici la soumission de l'événement du point de vue du serveur
io.sockets.in('une autre pièce').emit('event_name', data);

//Diffusion à tous les clients
io.sockets.emit('event_name', data);

En plus de diffuser des messages vers la salle, vous pouvez également obtenir des informations sur la salle via l'API suivante.

Copier le code Le code est le suivant :

//Obtenir des informations sur toutes les chambres
//key est le nom de la salle, value est le tableau d'ID de socket correspondant au nom de la salle
io.sockets.manager.rooms

//Amenez le client dans la salle particulière et renvoyez toutes les instances de socket dans cette salle
io.sockets.clients('salle particulière')

//Obtenir les informations sur la pièce saisies par cette socket via socket.id
io.sockets.manager.roomClients[socket.id]

3. Événement

Socket.IO a des événements par défaut intégrés lors de la conception d'événements, nous devons éviter les noms d'événements par défaut et utiliser ces événements par défaut de manière flexible.

Événements côté serveur :

1).io.sockets.on('connection', function(socket) {}) : déclenché une fois la connexion au socket réussie, utilisé pour l'initialisation
socket.on('message', function(message, callback) {}) : cet événement est déclenché lorsque le client transmet un message via socket.send le message est le message transmis et le rappel est le rappel à exécuter après réception du message. message
2).socket.on('anything', function(data) {}) : déclenché lorsqu'un événement est reçu
3).socket.on('disconnect', function() {}) : Déclenché lorsque le socket perd la connexion (y compris la fermeture du navigateur, la déconnexion active, la déconnexion, etc. toute situation de déconnexion)

Événements clients :

1).connect : Connexion réussie
2).connexion : Connexion
3).déconnecter : Déconnecter
4).connect_failed:La connexion a échoué
5).error : Une erreur s'est produite et ne peut pas être gérée par d'autres types d'événements
6).message : identique à l'événement de message côté serveur
7).anything : identique à l'événement Anything côté serveur
8).reconnect_failed : Échec de la reconnexion
9).reconnect : reconnecté avec succès
10).reconnexion : Reconnexion

Ici, nous devons mentionner l'ordre dans lequel le socket client initie une connexion. Lors de la première connexion, la séquence de déclenchement de l'événement est : connexion->connecter; lorsque la connexion est perdue, la séquence de déclenchement de l'événement est : déconnexion->reconnexion (éventuellement plusieurs fois)->connexion->reconnexion- > se connecter.

4. Autorisation

1). Diffusion à tous les clients : socket.broadcast.emit('broadcast message');

2) Entrez dans une salle (très simple à utiliser ! C'est l'équivalent d'un espace de noms et peut diffuser vers une salle spécifique sans affecter les clients dans d'autres salles ou pas dans la salle) : socket.join('votre nom de salle') );

3). Diffusez un message dans une salle (l'expéditeur ne peut pas recevoir le message) : socket.broadcast.to('votre nom de salle').emit('broadcast room message');

4). Diffusez un message dans une salle (y compris l'expéditeur peut recevoir le message) (cette API appartient à io.sockets) : io.sockets.in('un autre nom de salle').emit('diffusion du message de la salle ' );

5). Forcer l'utilisation de la communication WebSocket : (client) socket.send('hi'), (serveur) utilise socket.on('message', function(data){}) pour recevoir.

L'introduction à l'utilisation avancée de Socket.IO se termine ici. Personnellement, je pense que ces API de base sont suffisantes pour une utilisation quotidienne, ce qui reflète également la philosophie de conception extrêmement simple et facile à utiliser de Socket.IO. Cet article n'est qu'une introduction. Lorsque vous rencontrez des problèmes qui ne peuvent pas être résolus dans une application réelle, il serait préférable de consulter le WIKI officiel détaillé.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn