Ответ 1
socket.broadcast.to
транслируется во все сокеты в данной комнате, кроме сокета, на котором он был вызван, пока io.sockets.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()
?
socket.broadcast.to
транслируется во все сокеты в данной комнате, кроме сокета, на котором он был вызван, пока io.sockets.in
транслируется во все сокеты в данной комнате.
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});
}
}
Приветствия
Обновление 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);
В Socket.IO 1.0,.to() и .in() одинаковы. И другие в комнате получат сообщение. Клиент отправит сообщение не получит.
Проверьте исходный код (v1.0.6):