Rumah >hujung hadapan web >tutorial js >Kemahiran penggunaan lanjutan Socket.IO dalam node.js_node.js

Kemahiran penggunaan lanjutan Socket.IO dalam node.js_node.js

WBOY
WBOYasal
2016-05-16 16:31:581420semak imbas

Dalam catatan blog sebelum ini Socket.IO, saya secara ringkas memperkenalkan penggunaan asas Socket.IO dan mencipta DEMO bilik sembang ringkas. Berdasarkan bab pengenalan, artikel ini terus meneroka penggunaan lanjutan Socket.IO. Artikel ini akan bermula dengan konfigurasi, bilik, acara, dsb., dan memperkenalkan beberapa API praktikal dan langkah berjaga-jaga dalam Socket.IO.

1 Socket.IO menyediakan 4 API konfigurasi: io.configure, io.set, io.enable, io.disable. Antaranya, io.set menetapkan satu item, dan io.enable dan io.disable digunakan untuk menetapkan satu item dalam konfigurasi Boolean. io.configure membolehkan anda mengkonfigurasi parameter yang berbeza untuk persekitaran pengeluaran yang berbeza (seperti pembangunan, ujian, dll.). Berikut mentakrifkan konfigurasi berbeza Socket.IO dalam pembangunan dan persekitaran keluaran:

var io = memerlukan('socket.io').dengar(80);

io.configure('pembangunan', function(){ ​ io.enable('etag klien pelayar');

​ io.set('tahap log', 1);
});

io.configure('release', function(){

​ io.set('transports', ['websocket']);

});


Berikut menyenaraikan beberapa item konfigurasi yang biasa digunakan Untuk parameter konfigurasi tertentu, sila rujuk WIKI rasmi

1).pengangkutan (lalai ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']): Tatasusunan yang mengandungi jenis kaedah komunikasi. Socket.IO menyokong pelbagai cara untuk mencapai komunikasi segera dalam talian, seperti soket web, pengundian, dll. Konfigurasi ini membolehkan anda memilih kaedah komunikasi alternatif.

2).tahap log (lalai 3): tahap keluaran log yang paling rendah, 0 ialah ralat, 1 adalah amaran, 2 ialah maklumat, 3 ialah nyahpepijat, lalai adalah untuk mengeluarkan semua jenis log.

3).selang degupan jantung (lalai 25 saat): selang penghantaran paket degupan jantung Pelanggan perlu menghantar paket degupan jantung ke pelayan dalam tempoh masa ini untuk mengekalkan komunikasi.

2. Bilik

Bilik adalah fungsi yang sangat berguna yang disediakan oleh Socket.IO. Bilik adalah sama dengan menyediakan ruang nama untuk beberapa pelanggan tertentu Semua siaran dan komunikasi dalam bilik tidak akan menjejaskan pelanggan di luar bilik.

Dalam bab pengenalan, kita tahu bahawa socket.join('room name') boleh digunakan oleh klien untuk masuk ke dalam bilik, dan socket.leave('room name') boleh digunakan untuk meninggalkan bilik. Apabila pelanggan memasuki bilik, ia boleh menyiarkan mesej dalam bilik dalam dua cara berikut:


//1. Siarkan acara ke bilik saya, dan pengirim akan dikecualikan (iaitu, mesej tidak akan diterima)
io.sockets.on('sambungan', fungsi (soket) {
//Nota: Berbanding dengan yang berikut, berikut ialah penyerahan acara dari perspektif pelanggan
socket.broadcast.to('bilik saya').emit('event_name', data);
}

///2 Siarkan acara ke bilik lain, dan semua pelanggan dalam bilik ini akan menerima mesej //Nota: Berbanding dengan yang di atas, berikut ialah penyerahan acara dari perspektif pelayan

io.sockets.in('bilik lain').emit('event_name', data);

//Siarkan kepada semua pelanggan

io.sockets.emit('event_name', data);



Selain menyiarkan mesej ke bilik, anda juga boleh mendapatkan maklumat bilik melalui API berikut.

//Dapatkan maklumat tentang semua bilik
//kunci ialah nama bilik, nilai ialah tatasusunan ID soket yang sepadan dengan nama bilik
io.sockets.manager.rooms

//Dapatkan pelanggan di dalam bilik tertentu dan kembalikan semua kejadian soket di dalam bilik ini io.sockets.clients('bilik tertentu')


//Dapatkan maklumat bilik yang dimasukkan oleh soket ini melalui socket.id

io.sockets.manager.roomClients[socket.id]


3. Acara

Socket.IO mempunyai beberapa acara lalai terbina dalam semasa mereka bentuk acara, kita harus mengelakkan nama acara lalai dan menggunakan acara lalai ini secara fleksibel.

Acara sampingan pelayan:

1).io.sockets.on('connection', function(soket) {}): Dicetuskan selepas sambungan soket berjaya, digunakan untuk pemula
socket.on('message', function(message, callback) {}): Peristiwa ini dicetuskan apabila klien menghantar mesej melalui socket.send ialah mesej yang dihantar dan panggilan balik ialah panggilan balik yang akan dilaksanakan selepas menerima mesej
2).socket.on('anything', function(data) {}): Dicetuskan apabila sebarang peristiwa diterima
3).socket.on('disconnect', function() {}): Dicetuskan apabila soket terputus sambungan (termasuk menutup penyemak imbas, memutuskan sambungan secara aktif, memutuskan sambungan, dsb. sebarang situasi pemutusan sambungan)

Acara pelanggan:

1).sambung: Sambungan berjaya
2).menyambung: Menyambung
3).putuskan sambungan: Putuskan sambungan
4).connect_failed:Sambungan gagal
5).ralat: Ralat telah berlaku dan tidak boleh dikendalikan oleh jenis acara lain
6).mesej: Sama seperti acara mesej sebelah pelayan
7).apa-apa sahaja: Sama seperti acara apa-apa bahagian pelayan
8).reconnect_failed: Sambung semula gagal
9).sambung semula: Berjaya menyambung semula
10).menyambung semula: Menyambung semula

Di sini kita perlu menyebut susunan soket pelanggan memulakan sambungan. Apabila menyambung buat kali pertama, urutan pencetus acara ialah: menyambung->sambung apabila sambungan terputus, urutan pencetus acara ialah: putuskan->sambung semula (mungkin beberapa kali)->sambung->sambung semula- >

4 1). Siarkan kepada semua pelanggan: socket.broadcast.emit('broadcast message');

2). Masuk ke bilik (sangat mudah digunakan! Ia bersamaan dengan ruang nama dan boleh disiarkan ke bilik tertentu tanpa menjejaskan pelanggan di bilik lain atau tidak di dalam bilik): socket.join('nama bilik anda' );

3). Siarkan mesej ke bilik (pengirim tidak boleh menerima mesej): socket.broadcast.to('nama bilik anda').emit('broadcast room message');

4). Siarkan mesej ke bilik (termasuk pengirim boleh menerima mesej) (API ini milik io.sockets): io.sockets.in('nama bilik lain').emit('broadcast room messages ' );

5). Paksa penggunaan komunikasi WebSocket: (klien) socket.send('hi'), (server) gunakan socket.on('message', function(data){}) untuk menerima.

Pengenalan kepada penggunaan lanjutan Socket.IO pada dasarnya berakhir di sini. Secara peribadi, saya merasakan bahawa API asas ini mencukupi untuk kegunaan harian, yang juga mencerminkan falsafah reka bentuk Socket.IO yang sangat ringkas dan mudah digunakan. Artikel ini hanyalah pengenalan Apabila anda menghadapi masalah yang tidak dapat diselesaikan dalam aplikasi sebenar, adalah lebih baik untuk menyemak WIKI terperinci rasmi.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn