2013-05-17 4 views
0

J'essaie de créer un client de discussion simple et je rencontre des problèmes pour le faire fonctionner sur plusieurs clients. Les chances sont que j'ai manqué quelque chose de vraiment simple. Quand j'envoie quelque chose d'un client, il est connecté à ce client mais pas à d'autres.socket.io ne fonctionne pas sur plusieurs clients

serveur:

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

io.sockets.on('connection', function (socket) { 
    socket.on('send', function (data) { 
     socket.emit('receive', data); 
    }); 
}); 

client:

var socket = io.connect('http://localhost:5000'); 
socket.on('receive', function(data){ 
    console.log("Data received at " + new Date() + ": " + data); 
}); 

Répondre

3

La variable socket qui est transmis à votre fonction de rappel est une poignée sur le client qui reliait, si socket.emit se comporte correctement , c'est-à-dire que devrait envoyer uniquement au client qui l'a créé.

Essayez:

socket.broadcast.emit('receive', data); 

à envoyer à tout le monde, sauf le client d'origine ou

io.sockets.emit('receive', data); 

à envoyer à tous les clients, y compris l'auteur.

1

Vous souhaitez émettre sur toutes les sockets, pas seulement celle qui a envoyé le message. Alors vous devriez utiliser:

io.sockets.emit('recieve', data); 

Cela suppose que vous n'êtes pas connectez les données sur le client d'envoyer avant de l'envoyer au serveur. Dans ce cas, vous souhaitez utiliser:

socket.broadcast.emit('recieve', data); 

qui enverra le message à tous les clients connectés sauf l'expéditeur.

See here for reference on Socket.io

Edit: Trevor m'a devancé. Cependant, pour une clarification supplémentaire: io.sockets est la même que io.of(''). Ce qui est pratique à savoir lorsque vous commencez à utiliser des espaces de noms dans une application scoket.io.

Questions connexes