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
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."