Je n'ai pas encore compris comment répondre directement à l'expéditeur uniquement à l'aide de socket.io
J'ai appris que io.sockets.emit envoie à tous les clients mais je ne renverrai pas d'informations à l'expéditeur.
code:
socket.on('login', function (data) {
db.users.find({username: cc.lowerCase(data.username)}, function(err, users) {
if (users.length > 0) {
users.forEach( function(user) {
console.log(user.length);
if (user.password == data.password) {
io.sockets.emit('login', { username: user.username });
} else {
io.sockets.emit('error', { message: "Wrong username or password!" });
}
});
} else {
io.sockets.emit('error', { message: "Wrong username or password!" });
}
});
});
Lorsque votre serveur écoute, vous obtenez généralement un socket lors de l'événement "connection":
require('socket.io').on('connect', function(socket){
Un socket connecte 2 points: le client et le serveur. Lorsque vous émettez sur ce socket, vous émettez vers ce client spécifique.
Exemple :
var io = require('socket.io');
io.on('connect', function(socket){
socket.on('A', function(something){
// we just received a message
// let's respond to *that* client :
socket.emit('B', somethingElse);
});
});
Veillez à ce que ce soient deux appels différents:
socket.emit
: émettre sur un seul socketio.sockets.emit
: émettre vers tous les socketsLa syntaxe est déroutante dans socketio. De plus, chaque socket est automatiquement connecté à sa propre salle avec l'id socket.id
(c'est comment le chat privé fonctionne dans socketio, ils utilisent des salles).
Envoyer à l'expéditeur et à personne d'autre
socket.emit('hello', msg);
Envoyer à tout le monde y compris l'expéditeur (si l'expéditeur est dans la pièce) dans la pièce "ma chambre"
io.to('my room').emit('hello', msg);
Envoyer à tout le monde sauf l'expéditeur (si l'expéditeur est dans la pièce) dans la pièce "ma chambre"
socket.broadcast.to('my room').emit('hello', msg);
Envoyer à tout le monde dans chaque pièce, y compris l'expéditeur
io.emit('hello', msg); // short version
io.sockets.emit('hello', msg);
Envoyer à un socket spécifique uniquement (chat privé)
socket.broadcast.to(otherSocket.id).emit('hello', msg);
tard mais mieux que jamais;)
J'ai eu comme ça:
io.on('connection', function(socket){
socket.emit('some event', data);
socket.on('private event', function(message){
this.emit('other private event', message);
}
}
Après quelques tests, je me suis rendu compte que la fermeture 'this.emit' à l'intérieur de 'l'événement privé' renvoyait uniquement à l'expéditeur. J'ai donc essayé 'this.broadcast.emit', qui envoie le message à tous les utilisateurs connectés, à l'exception de l'expéditeur. Je crois que c'est ce que vous voulez de votre code.