user3577360 user3577360 - 1 year ago 269
Node.js Question send packet to sender only

I have yet to figure out how to directly respond to only the sender using

I have learned that io.sockets.emit sends to all clients but I wont to send information back to the sender.


socket.on('login', function (data) {
db.users.find({username: cc.lowerCase(data.username)}, function(err, users) {
if (users.length > 0) {
users.forEach( function(user) {
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!" });

Answer Source

When your server listens, you usually get a socket at the "connection" event :

require('').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('');
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 socket
  • io.sockets.emit : emit to all sockets
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download