Apa perbedaan antara io.sockets.emit dan broadcast?

98

Apa perbedaan antara io.sockets.emit dan socket.broadcast.emit? Apakah hanya siaran yang memancarkan ke semua orang TETAPI soket yang mengirimkannya?

Sepertinya mereka dapat digunakan secara bergantian:

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

Jawaban:

175

io.sockets.emit akan dikirim ke semua klien

socket.broadcast.emit akan mengirim pesan ke semua klien lain kecuali koneksi yang baru dibuat

Posting Wiki Socket.IO ini akan membantu semua orang yang membaca pertanyaan ini:

Jayantha Lal Sirisena
sumber
22
baik itu membutuhkan waktu 3 jam untuk memecahkan masalah.
Petrogad
Saya dapat memverifikasi bahwa ini memang perilakunya, tetapi saya tidak dapat melihat dokumentasi apa pun untuk socket.broadcast atau socket.broadcast.emit di dokumen Github atau di situs web Socket.io . Apakah saya melewatkan sesuatu? (dan wiki telah hilang)
scipilot
1
Apa yang bahkan "lebih baik" tentang ini adalah bahwa contoh aplikasi "obrolan" hampir secara eksklusif digunakan socket.broadcast.emitsementara API itu tidak pernah didokumentasikan di mana pun.
Avi Cherry
@Sobiaholic Saya masih belum menemukan alasan yang jelas untuk tidak mengirimkan perubahan ke koneksi saat ini. Apakah saat klien yang memicu acara tersebut telah membuat pembaruan optimis sebelumnya?
Nick Pineda
2
Ini bukan "kecuali koneksi yang baru dibuat", ini harus "ke semua klien lain kecuali dirinya sendiri". Anda dapat memiliki koneksi yang baru dibuat (klien bergabung dengan ruang obrolan) dan Anda mengirim pesan menggunakan socket.broadcast.emitdan mereka akan menerimanya, tetapi bukan Anda.
NiCk Newman
47

socket.broadcast.emit()berperilaku serupa io.sockets.emit, tetapi alih-alih memancarkan ke semua soket yang terhubung, ia akan memancarkan ke semua soket yang terhubung kecuali yang sedang dipanggil. Jadi dalam hal ini soket yang dirujuk oleh sockettidak akan menerima acara tersebut.

Karthic Rao
sumber
6
satu pembaruan lagi - sesuai jawaban Jayantha dan analisis saya sendiri, ini juga TIDAK memancarkan ke koneksi yang baru dibuat, yaitu koneksi klien baru yang dibuat setelah 'soket' dibuat. Ini adalah perbedaan penting dan utama !!
Anmol Saraf
6
"Koneksi baru dibuat" yang dimaksud Jayantha adalah soket yang acara koneksi sedang ditangani dan siapa yang akan mengeluarkan siaran. Inti dari siaran adalah bahwa ia pergi ke setiap klien kecuali soket 'penyiaran' - urutan koneksi klien dibuat tidak ada bedanya.
Titik Koma
8

Skenario: 1: - Dengan menggunakan io.sockets.emit Detil Diagram: -io.sockets.emit

Di sini Setiap Socket mendapat Pesan termasuk Inisiator .

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

Skenario: 2: - Dengan menggunakan socket.broadcast.emit Detil Diagram: -socket.broadcast.emit

Di sini Setiap Soket mendapatkan Pesan Kecuali Satu yaitu Inisiator .

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

Kesimpulan: - Sekarang ini akan sangat tergantung pada kebutuhan bisnis kita mana yang lebih disukai.

Anshu Ashish
sumber