web-dev-qa-db-fra.com

io.on ('connexion', ...) vs io.sockets.on ('connexion', ...)

J'utilise socket.io et la pile Mean pour une application web. J'ai démarré le serveur pour socket sur le port 3006 ..

var http = require('http').createServer(app);
http.listen(3006);
var io = require('socket.io').listen(http);

Les deux semblent fonctionner sur la connexion.

io.on('connection', function (socket) {
    console.log('Socket succesfully connected with id: '+socket.id);
});

et...

io.sockets.on('connection', function (socket) {
   console.log('Socket succesfully connected with id: '+socket.id);
});

Quelle est la différence entre io.on et io.sockets.on et lequel dois-je utiliser lors de la première connexion ..?

Bien que page socket.on npm utilise io.on pourquoi ça marche pour io.sockets.on

31
Srinath

L'espace de noms par défaut auquel les clients Socket.IO se connectent par défaut est: /. Il est identifié par io.sockets ou simplement io ( docs ).

Cet exemple copié de la documentation:

// the following two will emit to all the sockets connected to `/`

io.sockets.emit('hi', 'everyone');

io.emit('hi', 'everyone');           // short form

Je suppose que c'est la même chose pour 'on', comme pour 'emit': utiliser 'io.sockets' équivaut à utiliser 'io' uniquement, c'est juste une forme plus courte.

Pour "nommer" vos sockets, cela signifie assigner différents points de terminaison ou chemins (qui peuvent être utiles).

D'une réponse à cela SO question :

"Socket.io fait tout le travail pour vous comme s'il s'agissait de deux instances distinctes, mais limite toujours les informations à une seule connexion, ce qui est plutôt intelligent."

13
AJO_