Файл readme для Socket.io содержит следующий пример:
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, и я использовал его в одном из своих проектов для создания многопользовательской игры.
io.sockets.in().emit()
иsocket.broadcast.to().emit()
являются двумя основными методами генерации, которые мы используем в комнатах Socket.io ( https://github.com/LearnBoost/socket.io/wiki/Rooms ). Комнаты позволяют простое разделение подключенных клиентов. Это позволяет отправлять события в подмножества списка подключенных клиентов и дает простой метод управления ими.Они позволяют нам управлять подмножествами списка подключенных клиентов (которые мы называем комнатами) и иметь аналогичные функции, такие как основные функции socket.io
io.sockets.emit()
иsocket.broadcast.emit()
.В любом случае я постараюсь привести примеры кодов с комментариями для объяснения. Посмотрите, поможет ли это;
Socket.io Комнаты
i) io.sockets.in (). emit ();
ii) socket.broadcast.to (). emit ();
Socket.io
i) io.sockets.emit ();
ii) socket.broadcast.emit ();
Ура
источник
Обновление 2019 : socket.io - это специальный модуль, который использует веб-сокеты, а затем возвращается к опросу HTTP-запросов. Только для веб-сокетов: для клиента используйте собственные веб-сокеты, а для node.js используйте ws или эту библиотеку.
Простой пример
Синтаксис socketio сбивает с толку. Кроме того, каждый сокет автоматически подключается к своей комнате с идентификатором
socket.id
(так работает приватный чат в socketio, они используют комнаты).Отправить отправителю и никому другому
Отправить всем, включая отправителя (если отправитель находится в комнате) в комнате "моя комната"
Отправить всем, кроме отправителя (если отправитель находится в комнате) в комнате "моя комната"
Отправить всем в каждой комнате , включая отправителя
Отправить только на конкретный сокет (приватный чат)
источник
otherSocket.on('connect',()=> { console.log(otherSocket.id); });
источник
В Socket.IO 1.0 .to () и .in () одинаковы. И другие в комнате получат сообщение. Клиент отправляет это сообщение не получит.
Ознакомьтесь с исходным кодом (v1.0.6):
https://github.com/Automattic/socket.io/blob/a40068b5f328fe50a2cd1e54c681be792d89a595/lib/socket.js#L173
источник
.to()
и,in
одинаковы, то что произойдет, когда я создам комнату с тем же именем, что и идентификатор некоторого сокета. Что,socket.broadcast.to(socketid)
например, делать тогда?