38

I am using socket.io and the Mean stack for a web app. I started the server for socket on 3006 port..

var http = require('http').createServer(app);
http.listen(3006);
var io = require('socket.io').listen(http);

Both of these seem to work on connection.

io.on('connection', function (socket) {
    console.log('Socket succesfully connected with id: '+socket.id);
});

and...

io.sockets.on('connection', function (socket) {
   console.log('Socket succesfully connected with id: '+socket.id);
});

What is the difference between io.on and io.sockets.on and which one should I use on first time connection..?

Though socket.on npm page uses io.on why is it working for io.sockets.on

Srinath Mandava
  • 3,384
  • 2
  • 24
  • 37
  • 1
    Not 100%, but I think it's just an alias. As with `io.sockets.emit` and `io.emit` seen [here](http://socket.io/docs/server-api/#server#emit). – Ben Fortune Jun 17 '14 at 14:57
  • @Ben Fortune well when i have both of them at the same time, both of them are executed..is it wrong to use io.on('connection',...) twice..? – Srinath Mandava Jun 17 '14 at 15:07

1 Answers1

18

The default namespace that Socket.IO clients connect to by default is: /. It is identified by io.sockets or simply io (docs).

This example copied from the documentation:

// the following two will emit to all the sockets connected to `/`

io.sockets.emit('hi', 'everyone');

io.emit('hi', 'everyone');           // short form

I assume it is the same for 'on', as it is for 'emit': using 'io.sockets' is equivalent to using 'io' only, it's just a shorter form.

To “namespace” your sockets, means assigning different endpoints or paths (which can be useful).

From an answer to this SO question:

"Socket.io does all the work for you as if it is two separate instances, but still limits the information to one connection, which is pretty smart."

Community
  • 1
  • 1
AJO_
  • 315
  • 1
  • 2
  • 10