Разница в номерах Socket.io между broadcast.to и socket.in

Socket.io readme содержит следующий пример:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.join('justin bieber fans');
  socket.broadcast.to('justin bieber fans').emit('new fan');
  io.sockets.in('rammstein fans').emit('new non-fan');
});

Какая разница между socket.broadcast.to() и io.sockets.in()?

Ответ 1

socket.broadcast.to транслируется во все сокеты в данной комнате, кроме сокета, на котором он был вызван, пока io.sockets.in транслируется во все сокеты в данной комнате.

Ответ 2

Node.js было чем-то, что меня действительно интересовало forawhile, и я использовал его в одном из моих проектов, чтобы сделать многопользовательскую игру.

io.sockets.in().emit() и socket.broadcast.to().emit() являются основными двумя методами испускания, которые мы используем в Socket.io Rooms (https://github.com/LearnBoost/socket.io/wiki/Rooms). Номера позволяют простое разбиение подключенных клиентов, Это позволяет событиям выходить с подмножествами подключенного списка клиентов и дает простой способ их управления.

Они позволяют нам управлять подмножествами подключенного списка клиентов (которые мы называем номерами) и иметь похожие функции, такие как основные функции socket.io io.sockets.emit() и socket.broadcast.emit().

В любом случае я попытаюсь привести примеры кодов с комментариями для объяснения. Посмотрите, помогает ли это;

Socket.io Rooms

i) io.sockets.in(). emit();

/* Send message to the room1. It broadcasts the data to all 
   the socket clients which are connected to the room1 */

io.sockets.in('room1').emit('function', {foo:bar});

ii) socket.broadcast.to(). emit();

io.sockets.on('connection', function (socket) {
    socket.on('function', function(data){

        /* Broadcast to room1 except the sender. In other word, 
            It broadcast all the socket clients which are connected 
            to the room1 except the sender */
        socket.broadcast.to('room1').emit('function', {foo:bar});

    }
}

Socket.io

i) io.sockets.emit();

/* Send message to all. It broadcasts the data to all 
   the socket clients which are connected to the server; */

io.sockets.emit('function', {foo:bar});

ii) socket.broadcast.emit();

io.sockets.on('connection', function (socket) {
    socket.on('function', function(data){

        // Broadcast to all the socket clients except the sender
        socket.broadcast.emit('function', {foo:bar}); 

    }
}

Приветствия

Ответ 3

Обновление 2019: socket.io - это специальный модуль, который использует веб-сокеты и затем возвращается к опросу http-запроса. Только для веб-сокетов: для клиента используйте нативные веб-сокеты, а для node.js используйте ws или эту библиотеку.

Простой пример

Синтаксис сбивает с толку в socketio. Кроме того, каждый сокет автоматически подключается к своей комнате с идентификатором socket.id (так работает частный чат в socketio, они используют комнаты).

Отправить отправителю и больше никому

socket.emit('hello', msg);

Отправить всем, включая отправителя (если отправитель находится в комнате) в комнате "моя комната"

io.to('my room').emit('hello', msg);

Отправить всем, кроме отправителя (если отправитель находится в комнате) в комнате "моя комната"

socket.broadcast.to('my room').emit('hello', msg);

Отправить всем в каждой комнате, включая отправителя

io.emit('hello', msg); // short version

io.sockets.emit('hello', msg);

Отправить только на определенный сокет (приватный чат)

socket.broadcast.to(otherSocket.id).emit('hello', msg);