2016-12-11 2 views
0

Je passe d'un sondage ajax à un push de données live socket.io mais j'ai une question sur les meilleures pratiques de gestion d'événements.Meilleure pratique pour gérer les événements Socket.io?

Disons que j'ai un serveur de base comme celui-ci:

var Clients = []; 
// Event fired every time a new client connects: 
io.on('connection', function(socket) { 
    Clients.push(socket); 
    // What else should go in here? 
    // Individual functions for each event? 

    socket.on('chat message', function(msg){ 
     console.log(':> '+msg); 
     io.emit('chat message', msg); 
    }); 

    // When socket disconnects, remove it from the list: 
    socket.on('disconnect', function() { 
     var index = Clients.indexOf(socket); 
     if (index != -1) { Clients.splice(index, 1); } 
    }); 
}); 

Dans l'exemple il y a un événement chat message, mais idéalement il y a beaucoup d'autres événements que je voudrais pousser à des clients en temps réel, tel que:

L'utilisateur envoie un message, l'utilisateur commence/arrête de taper, l'utilisateur aime un message, l'utilisateur vous invite à devenir un ami/membre du groupe, etc.

Il y a beaucoup d'événements que je voudrais capturer en temps réel mais il semble qu'il doit y avoir une meilleure manière que bachotant l'instruction io.on() pleine de tous.

J'ai examiné Node OOP mais je ne sais pas si cela aiderait nécessairement dans cette application. Donc, là où nous avons les déclarations socket.on(), quelle serait la meilleure pratique pour inclure l'événement attraper comme je l'ai décrit?

Répondre

2

Il y a beaucoup d'événements que je voudrais saisir en temps réel mais il semble qu'il doit y avoir une meilleure façon que bachotage la déclaration io.on() complète de tous.

Nope. À l'intérieur du io.on('connection', ...) est où vous avez une fermeture avec la variable socket qui se rapporte à une nouvelle connexion. Ainsi, tout gestionnaire d'événements auquel vous voulez répondre à partir de cette socket va là ou dans une fonction que vous appelez à partir de là et passez le socket à. C'est juste comment ça fonctionne.

FYI, dans l'intérêt de la modularité, vous n'avez pas besoin de mettre tous les gestionnaires d'événements à l'intérieur d'un io.on('connection', ...). Si vous exportez l'objet io vers d'autres modules ou que vous le lui transmettez dans un constructeur de module, vous pouvez demander à d'autres modules de créer leurs propres écouteurs io.on('connection', ...) et d'installer leurs propres gestionnaires d'événements dans leur propre io.on('connection', ...). io est un EventEmitter, donc il peut supporter autant d'écouteurs pour l'événement connection que vous le souhaitez et tous seront avertis.

+0

@DanL - J'ai ajouté un autre paragraphe sur une autre option pour la modularité. – jfriend00