Qual è la differenza tra io.sockets.emit e broadcast?


98

Qual è la differenza tra io.sockets.emit e socket.broadcast.emit? È solo quella trasmissione trasmessa a tutti MA il socket che la invia?

Sembra che possano essere usati in modo intercambiabile:

io.sockets.on('connection', function (socket) {
  //these should do the same thing  
  io.sockets.emit('this', { receivers: 'everyone'});

  socket.broadcast.emit('this', { receivers: 'everyone but socket'}); //emits to everyone but socket
  socket.emit('this', { receivers: 'socket'}); //emits to socket
});

Risposte:


175

io.sockets.emit invierà a tutti i clienti

socket.broadcast.emit invierà il messaggio a tutti gli altri client eccetto la connessione appena creata

Questo post della Wiki di Socket.IO aiuterà tutti a leggere questa domanda:


22
beh, ci sono volute 3 ore di risoluzione dei problemi per capirlo.
Petrogad,

Posso verificare che questo sia effettivamente il comportamento, ma non riesco a vedere alcuna documentazione per socket.broadcast né socket.broadcast.emit nei documenti Github né sul sito Web Socket.io . Mi sto perdendo qualcosa? (e il wiki è andato)
scipilot

1
Ciò che è ancora "migliore" di questo è che l'applicazione "chat" di esempio fa un uso quasi esclusivo socket.broadcast.emitmentre quell'API non è mai documentata da nessuna parte.
Avi Cherry

@Sobiaholic Non ho ancora riscontrato l'ovvia ragione per non emettere la modifica alla connessione corrente. È per quando il cliente che ha attivato l'evento aveva già effettuato un aggiornamento ottimistico in anticipo?
Nick Pineda

2
Non è "tranne le connessioni appena create", dovrebbe essere "per tutti gli altri client tranne se stesso". Puoi avere una connessione appena creata (un client che si unisce alla chat room) e inviare un messaggio utilizzando socket.broadcast.emite loro lo riceveranno, ma non tu.
NiCk Newman

47

socket.broadcast.emit()si comporta in modo simile a io.sockets.emit, ma invece di emettere a tutti i socket collegati emetterà a tutti i socket collegati tranne quello su cui viene chiamato. Quindi in questo caso il socket a cui fa riferimento socketnon riceverà l'evento.


6
un altro aggiornamento - come per la risposta di Jayantha e la mia analisi, NON emette nemmeno le connessioni appena create, cioè le nuove connessioni client che sono state create dopo la creazione del "socket". Questa è una differenza importante e fondamentale !!
Anmol Saraf

6
La "connessione appena creata" a cui si riferisce Jayantha è il socket il cui evento di connessione viene gestito e che emetterebbe la trasmissione. Il punto di trasmissione è che va a tutti i client eccetto il socket "broadcasting" - l'ordine in cui sono state stabilite le connessioni client non fa differenza.
Punto

8

Scenario: 1: - Tramite l'uso di io.sockets.emit Diagramma dettagliato: -io.sockets.emit

Qui ogni socket riceve il messaggio incluso l' iniziatore .

  // BY IO>SOCKETS>EMIT
   io.sockets.emit('MyChannelBroadcast',
               {
                 owner:"Anshu Ashish",
                 clientCount:clients,
                 message:"Welcome All"
               }
    );

Scenario: 2: - Tramite l'uso di socket.broadcast.emit Diagramma dettagliato: -socket.broadcast.emit

Qui ogni socket riceve un messaggio tranne uno, ovvero l' iniziatore .

    // BY SOCKET>BROADCAST>EMIT
   socket.broadcast.emit('BroadCastExceptMe',{data:"HAVE A NICE DAY"});

Conclusione: - Ora dipenderà totalmente dalle nostre esigenze aziendali quale sarà la preferibile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.