O leia-me de Socket.io contém o seguinte exemplo:
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');
});
Qual é a diferença entre socket.broadcast.to()
e io.sockets.in()
?
Respostas:
socket.broadcast.to
transmite para todos os soquetes de determinada sala, exceto para o soquete em que foi chamado, enquanto fazio.sockets.in
transmissões para todos os soquetes de determinada sala.fonte
Node.js era algo que eu estava realmente interessado desde então e usei em um de meus projetos para fazer um jogo multijogador.
io.sockets.in().emit()
esocket.broadcast.to().emit()
são os dois principais métodos de emissão que usamos nas salas do Socket.io ( https://github.com/LearnBoost/socket.io/wiki/Rooms ) As salas permitem o particionamento simples dos clientes conectados. Isso permite que eventos sejam emitidos com subconjuntos da lista de clientes conectados e fornece um método simples de gerenciá-los.Eles nos permitem gerenciar os subconjuntos da lista de clientes conectados (que chamamos de quartos) e têm as funcionalidades semelhantes como as funções do socket.io principal
io.sockets.emit()
esocket.broadcast.emit()
.De qualquer forma, tentarei dar os códigos de exemplo com os comentários para explicar. Veja se ajuda;
Quartos Socket.io
i) io.sockets.in (). emit ();
ii) socket.broadcast.to (). emit ();
Socket.io
i) io.sockets.emit ();
ii) socket.broadcast.emit ();
Felicidades
fonte
Atualização 2019 : socket.io é um módulo especial que usa websockets e, em seguida, retorna à pesquisa de solicitação http. Apenas para websockets: para o cliente, use websockets nativos e para node.js, use ws ou esta biblioteca.
Exemplo simples
A sintaxe é confusa em socketio. Além disso, cada socket é automaticamente conectado à sua própria sala com o id
socket.id
(é assim que o chat privado funciona no socketio, eles usam salas).Envie para o remetente e mais ninguém
Enviar para todos, incluindo o remetente (se o remetente estiver na sala) na sala "minha sala"
Enviar para todos, exceto para o remetente (se o remetente estiver na sala) na sala "minha sala"
Envie para todos em todas as salas , incluindo o remetente
Enviar para soquete específico apenas (chat privado)
fonte
otherSocket.on('connect',()=> { console.log(otherSocket.id); });
fonte
No Socket.IO 1.0, .to () e .in () são os mesmos. E outras pessoas na sala receberão a mensagem. O cliente envia não receberá a mensagem.
Verifique o código-fonte (v1.0.6):
https://github.com/Automattic/socket.io/blob/a40068b5f328fe50a2cd1e54c681be792d89a595/lib/socket.js#L173
fonte
.to()
e,in
são iguais, o que aconteceria quando eu criasse uma sala com exatamente o mesmo nome que o id de algum soquete. O que faria,socket.broadcast.to(socketid)
por exemplo, então?