sanket
sanket

Reputation: 664

socket.emit not emitting messages to the sender

  1. 'socket.emit' not sending messages to the client which sent it,while
  2. 'socket.broadcast.emit' sending messages to all the clients including the sender.

I cannot figure out what I am missing here. For the second case, I checked for socket.id while sending the message and logged it when response is received,it turned out to be the same

socket.js

var socket = require('socket.io')(),
socketApi = {};

socketApi.io = socket;

socketApi.io.on('connection',(client) => {
    client.on('clientMessage', (msg) => {
        console.log('hi');
        client.emit('serverMessage',msg);
    })
    client.on('disconnect',() => {
        socketApi.io.emit('serverMessage','client is disconnected');
        console.log('disconnected');
    })
})


module.exports = socketApi;

client.js

getServerResponse() {
        socket.on('serverMessage',(msg) => {
                console.log(msg);
            })
    }

Upvotes: 2

Views: 1883

Answers (1)

Hugo Pineda
Hugo Pineda

Reputation: 21

According to the docs broadcast.emit sends to all except the sender and emit sends to the sender only: https://socket.io/docs/emit-cheatsheet/.

I was in the same issue so I ended up calling both:

// socket.io server
io.on('connection', socket => {
  socket.on('message', (data) => {
    messages.push(data)
    socket.broadcast.emit('message', data) // sends to all except the sender
    socket.emit('message', data)  // sends to the sender
  })
})

Upvotes: 2

Related Questions