Para enviar algo para todos os clientes, você usa:
io.sockets.emit('response', data);
Para receber dos clientes, você usa:
socket.on('cursor', function(data) {
...
});
Como posso combinar os dois para que, ao receber uma mensagem no servidor de um cliente, eu a envie a todos os usuários, exceto aquele que está enviando a mensagem?
socket.on('cursor', function(data) {
io.sockets.emit('response', data);
});
Preciso hackear isso enviando o ID do cliente com a mensagem e depois verificando no lado do cliente ou existe uma maneira mais fácil?
javascript
node.js
socket.io
Switz
fonte
fonte
io
here.onlysocket
// sending to all clients except sender
, o que usar// sending a response to sender client only
?socket.to('others').emit('an event', { some: 'data' });
também transmite em uma sala.Na resposta do @LearnRPG, mas com a versão 1.0:
Para responder ao comentário de @Crashalot,
socketid
vem de:fonte
socketid
enviar para um soquete individual?socket.id
do seu objeto socket.Aqui está uma resposta mais completa sobre o que mudou de 0.9.x para 1.x.
Eu queria editar o post de @soyuka, mas minha edição foi rejeitada pela revisão por pares.
fonte
broadcast.emit envia a mensagem para todos os outros clientes (exceto o remetente)
fonte
Emit cheatsheet
fonte
Para namespaces dentro de salas, o loop da lista de clientes em uma sala (semelhante à resposta de Nav) é uma das únicas duas abordagens que eu achei que funcionariam. O outro é usar excluir. POR EXEMPLO
fonte
Outros casos
fonte
Atualizada a lista para documentação adicional.
Espero que isto ajude.
fonte
use esta codificação
este socket.broadcast.emit () emitirá tudo na função, exceto para o servidor que está emitindo
fonte
io
dentro deste se o retorno de chamada é definida em anteras arquivoio
como globalEstou usando espaços para nome e salas - achei
trabalhar onde
nao fiz
(alguém mais deve enfrentar esse problema)
fonte