Selon le support.io exemples:
Pour la diffusion, il suffit d'ajouter un
broadcast
le drapeau enemit
etsend
des appels de méthode. La diffusion de l'envoi d'un message à tout le monde, sauf pour le socket qui démarre.
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.broadcast.emit('user connected');
});
J'ai essayé de combiner cela avec le nouveau socket.io namsepace fonctionnalité, j'ai obtenu ceci:
var chat = ioserver.of('/chat');
chat.on('connection', function (socket) {
console.log('chat connection');
socket.on('message', function (msg) {
console.log(msg);
chat.send(msg);
});
});
Cela fonctionne bien, tout le monde sur le canal de discussion (et pas d'autres canaux) reçoit le message. Mais l'expéditeur aussi qu'il obtient. J'ai donc essayé de faire ce qui suit:
chat.on('connection', function (socket) {
console.log('chat connection');
socket.on('message', function (msg) {
console.log(msg);
chat.broadcast.send(msg);
});
});
et il a eu une Exception: "Impossible d'appeler la méthode 'envoyer' undefined.' Ok, alors j'ai pensé, que la diffusion est la fonction d'un seul support (il se sent un peu bizarre, même si - faire une seule prise peut diffusent à tous les autres...). J'ai donc essayé:
chat.on('connection', function (socket) {
console.log('chat connection');
socket.on('message', function (msg) {
console.log(msg);
socket.broadcast.send(msg);
});
});
mais maintenant, c'était pire, personne n'a reçu le message, même pas l'expéditeur. De toute façon, c'était ce que je devrait logiquement - un socket à ne pas diffuser de quelque chose par lui-même. Et aucune des exceptions en ce moment, donc la diffusion est définie pour la prise.
Si je fais:
chat.on('connection', function (socket) {
console.log('chat connection');
socket.on('message', function (msg) {
console.log(msg);
socket.send(msg);
});
});
alors seulement l'expéditeur d'origine reçoit le message, et qui est encore assez logique - j'ai utilisé le "envoyer" du client liés à la prise.
La question est donc: quelle est la bonne façon d'utiliser la fonctionnalité de diffusion?
Peut-être que le développeur de la prise.io fait une erreur et a ajouté la fonctionnalité de diffusion pour le mauvais objet (ce que je comprends, ça doit être la caractéristique de l'espace de noms mais maintenant, il n'est définie que pour le support)?