Readme Socket.io berisi contoh berikut:
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');
});
Apa perbedaan antara socket.broadcast.to()
dan io.sockets.in()
?
Jawaban:
socket.broadcast.to
menyiarkan ke semua soket di ruangan tertentu, kecuali ke soket yang digunakan untuk memanggilnya saatio.sockets.in
menyiarkan ke semua soket di ruangan tertentu.sumber
Node.js adalah sesuatu yang saya sangat tertarik sebelumnya dan saya menggunakannya di salah satu proyek saya untuk membuat game multipemain.
io.sockets.in().emit()
dansocket.broadcast.to().emit()
merupakan dua metode emisi utama yang kami gunakan di Kamar Socket.io ( https://github.com/LearnBoost/socket.io/wiki/Rooms ) Ruangan memungkinkan partisi sederhana dari klien yang terhubung. Hal ini memungkinkan peristiwa untuk dipancarkan ke subset dari daftar klien yang terhubung, dan memberikan metode sederhana untuk mengelolanya.Mereka memungkinkan kita untuk mengelola subset dari daftar klien yang terhubung (yang kita sebut kamar) dan memiliki fungsi serupa seperti fungsi socket.io utama
io.sockets.emit()
dansocket.broadcast.emit()
.Pokoknya saya akan mencoba memberikan kode contoh dengan komentar untuk menjelaskan. Lihat apakah itu membantu;
Kamar Socket.io
i) io.sockets.in (). emit ();
ii) socket.broadcast.to (). emit ();
Socket.io
i) io.sockets.emit ();
ii) socket.broadcast.emit ();
Bersulang
sumber
Pembaruan 2019 : socket.io adalah modul khusus yang menggunakan websockets dan kemudian kembali ke http request polling. Untuk websockets saja: untuk klien gunakan websockets asli dan untuk node.js gunakan ws atau library ini.
Contoh sederhana
Sintaksnya membingungkan di socketio. Juga, setiap soket secara otomatis terhubung ke kamar mereka sendiri dengan id
socket.id
(ini adalah cara kerja obrolan pribadi di socketio, mereka menggunakan kamar).Kirim ke pengirim dan tidak ada orang lain
Kirim ke semua orang termasuk pengirim (jika pengirim ada di kamar) di kamar "kamar saya"
Kirim ke semua orang kecuali pengirim (jika pengirim ada di kamar) di kamar "kamar saya"
Kirim ke semua orang di setiap ruangan , termasuk pengirim
Kirim ke soket tertentu saja (obrolan pribadi)
sumber
otherSocket.on('connect',()=> { console.log(otherSocket.id); });
sumber
Di Socket.IO 1.0, .to () dan .in () sama. Dan orang lain di ruangan itu akan menerima pesan tersebut. Klien mengirimkannya tidak akan menerima pesan.
Lihat kode sumber (v1.0.6):
https://github.com/Automattic/socket.io/blob/a40068b5f328fe50a2cd1e54c681be792d89a595/lib/socket.js#L173
sumber
.to()
dan,in
sama, lalu apa yang akan terjadi jika saya membuat ruangan dengan nama yang sama persis dengan beberapa ID soket.socket.broadcast.to(socketid)
Misalnya, apa yang akan dilakukan?