I have yet to figure out how to directly respond to only the sender using socket.io
I have learned that io.sockets.emit sends to all clients but I wont to send information back to the sender.
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!" }); } }); });
When your server listens, you usually get a socket at the "connection" event :
require('socket.io').on('connect', function(socket){
A socket connects 2 points : the client and the server. When you emit on this socket, you emit to this specific client.
Example :
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); }); });
Be careful that those are two different calls :
socket.emit
: emit to just one socketio.sockets.emit
: emit to all socketsIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With