Подтвердить что ты не робот

Io.on('connection',...) vs io.sockets.on('connection',...)

Я использую socket.io и Mean для веб-приложения. Я запустил сервер для сокета на порту 3006.

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

Оба они, похоже, работают с подключением.

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

и...

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

В чем разница между io.on и io.sockets.on и какой из них следует использовать при первом подключении?

Хотя socket.on npm page использует io.on, почему он работает для io.sockets.on

4b9b3361

Ответ 1

По умолчанию пространство имен, к которым подключаются клиенты Socket.IO, по умолчанию: /. Он идентифицируется io.sockets или просто io (docs).

Этот пример скопирован из документации:

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

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

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

Я предполагаю, что это то же самое для 'on', как и для 'emit': использование 'io.sockets' эквивалентно использованию только 'io', это просто более короткая форма.

В "пространство имен" ваши сокеты означает назначение разных конечных точек или путей (что может быть полезно).

Из ответа на это SO question:

"Socket.io выполняет всю работу для вас, как если бы это были два отдельных экземпляра, но все же ограничивает информацию одним соединением, что довольно удобно".