İo.sockets.emit ile yayın arasındaki fark nedir?


98

İo.sockets.emit ile socket.broadcast.emit arasındaki fark nedir? Gönderen soket FAKAT herkese sadece yayın mı yayıyor?

Görünüşe göre birbirinin yerine kullanılabilirler:

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
});

Yanıtlar:


176

io.sockets.emit tüm müşterilere gönderecek

socket.broadcast.emit mesajı yeni oluşturulan bağlantı dışındaki tüm diğer istemcilere gönderecek

Bu Socket.IO Wiki gönderisi, bu soruyu okuyan herkese yardımcı olacaktır:


23
Anlamak için 3 saat sorunlu çekim aldı.
Petrogad

Bunun gerçekten davranış olduğunu doğrulayabilirim, ancak Github belgelerinde veya Socket.io web sitesinde socket.broadcast veya socket.broadcast.emit için herhangi bir belge göremiyorum . Bir şey mi kaçırıyorum? (ve wiki gitti)
scipilot

1
Bununla ilgili "daha iyi" olan şey, örnek "sohbet" uygulamasının neredeyse özel bir kullanım socket.broadcast.emitsağlarken, bu API hiçbir zaman hiçbir yerde belgelenmez.
Avi Cherry

@Sobiaholic Değişikliği mevcut bağlantıda yayınlamamanın bariz nedeniyle hala karşılaşmadım. Etkinliği tetikleyen müşterinin önceden iyimser bir güncelleme yaptığı zaman için mi?
Nick Pineda

2
"Yeni oluşturulan bağlantılar dışında" değil, "kendisi dışındaki tüm diğer istemcilere" olmalıdır. Yeni oluşturulmuş bir bağlantınız olabilir (sohbet odasına katılan bir müşteri) ve kullanarak bir mesaj gönderirsiniz socket.broadcast.emitve onlar alır, ancak sizi alamaz.
NiCk Newman

47

socket.broadcast.emit()benzer davranır io.sockets.emit, ancak tüm bağlı soketlere yaymak yerine, çağrıldığı soket dışındaki tüm bağlı soketlere yayar. Bu durumda, tarafından referans verilen soket socketolayı almayacaktır.


6
bir güncelleme daha - Jayantha'nın cevabına ve kendi analizime göre, yeni oluşturulan bağlantılara, yani 'soket' oluşturulduktan sonra oluşturulan yeni istemci bağlantılarına da YAYMAZ. Bu önemli ve anahtar bir farktır !!
Anmol Saraf

6
"Yeni oluşturulan bağlantı" Jayantha, bağlantı olayı işlenen ve yayını kimin yayınlayacağı soketi ifade eder. Yayının amacı, 'yayın' soketi dışındaki her istemciye gitmesidir - istemci bağlantılarının kurulma sırası hiçbir fark yaratmaz.
noktalı virgül

8

Senaryo: 1: - io.sockets.emit kullanılarak Ayrıntılı Diyagram: -io.sockets.emit

Burada Her Soket, Başlatıcı dahil Mesajı alır .

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

Senaryo: 2: - socket.broadcast.emit kullanılarak Ayrıntılı Şema: -socket.broadcast.emit

Burada Her Soket Bir Hariç Mesaj, yani Başlatıcı alıyor .

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

Sonuç: - Artık hangisinin tercih edileceği tamamen bizim iş gereksinimlerimize bağlı olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.