1. Pendahuluan
Pertama -tama, situs web resmi Socket.io: http://socket.io
Situs web resmi sangat ringkas, dan bahkan tidak ada dokumentasi API, hanya "cara menggunakan" sederhana untuk merujuk. Karena Socket.io sesederhana dan mudah digunakan seperti situs web resmi.
Jadi apa itu socket.io? Socket.io adalah perpustakaan Websocket yang mencakup JS sisi klien dan nodeJs sisi server. Tujuannya adalah untuk membangun aplikasi real-time yang dapat digunakan pada berbagai browser dan perangkat seluler. Ini akan secara otomatis memilih cara terbaik untuk mewujudkan aplikasi jaringan real-time berdasarkan browser dari berbagai metode seperti WebSocket, Ajax Long Polling, Iframe Streaming, dll., Yang sangat nyaman dan ramah pengguna. Browser yang didukung serendah IE5.5, yang seharusnya memenuhi sebagian besar kebutuhan.
2. Instalasi dan Penempatan
2.1 Instalasi
Pertama -tama, instalasinya sangat sederhana, di lingkungan Node.js, hanya satu kalimat:
Salinan kode adalah sebagai berikut:
NPM Instal Socket.io
2.2 Menggabungkan Express untuk Membangun Server
Express adalah kerangka kerja aplikasi web node.js kecil, yang sering digunakan saat membangun server HTTP, sehingga secara langsung dijelaskan dengan Socket.io dan Express sebagai contoh.
Salinan kode adalah sebagai berikut:
var express = membutuhkan ('ekspres')
, app = express ()
, server = membutuhkan ('http'). createServer (app)
, io = membutuhkan ('socket.io'). Dengarkan (server);
server.listen (3001);
Jika Anda tidak menggunakan Express, silakan merujuk ke socket.io/#how-to-use
3. Metode Penggunaan Dasar
Ini terutama dibagi menjadi dua potong kode: sisi server dan sisi klien, yang keduanya sangat sederhana.
Server (app.js):
Salinan kode adalah sebagai berikut:
// Hubungkan kode di atas
app.get ('/', function (req, res) {
res.sendfile (__ dirname + '/index.html');});
io.sockets.on ('connection', function (socket) {
socket.emit ('news', {hello: 'world'});
socket.on ('acara lain', fungsi (data) {
console.log (data);
});
});
Pertama, fungsi io.sockets.on menerima string "koneksi" sebagai peristiwa di mana klien memulai koneksi. Ketika koneksi berhasil, fungsi panggilan balik dengan parameter soket dipanggil. Saat kami menggunakan Socket.io, kami pada dasarnya menangani permintaan pengguna dalam fungsi panggilan balik ini.
Hal terpenting tentang soket adalah memancarkan dan menyala. Yang pertama mengirimkan (masalah) suatu acara (nama acara diwakili oleh string). Nama acara dapat disesuaikan, dan ada beberapa nama acara default, diikuti oleh objek, menunjukkan konten yang dikirim ke soket; Yang terakhir menerima suatu acara (nama acara diwakili oleh string), diikuti oleh fungsi panggilan balik yang menerima panggilan acara, di mana data adalah data yang diterima.
Dalam contoh di atas, kami mengirim acara berita dan menerima acara acara lainnya, sehingga klien harus memiliki acara menerima dan mengirim acara yang sesuai. Ya, kode klien persis sebaliknya dan sangat mirip dengan server.
Klien (klien.js)
Salinan kode adalah sebagai berikut:
<skrip src = "/socket.io/socket.io.js"> </script>
<script>
var socket = io.connect ('http: // localhost');
socket.on ('news', function (data) {
console.log (data);
socket.emit ('acara lain', {my: 'data'});
});
</script>
Ada dua hal yang perlu diperhatikan: jalur socket.io.js perlu ditulis dengan benar. File JS ini sebenarnya ditempatkan di folder Node_Modules di sisi server. Ini akan dialihkan saat meminta file ini. Oleh karena itu, jangan kaget bahwa file ini tidak ada di sisi server tetapi mengapa masih berfungsi secara normal. Tentu saja, Anda dapat menyalin file socket.io.js sisi server ke lokal dan menjadikannya file JS sisi klien, jadi Anda tidak perlu meminta file JS ini dari server node setiap kali, yang meningkatkan stabilitas. Poin kedua adalah menggunakan var socket = io.connect ('alamat situs web atau ip'); Untuk mendapatkan objek soket, dan kemudian Anda dapat menggunakan soket untuk mengirim dan menerima acara. Mengenai pemrosesan acara, kode di atas berarti bahwa setelah menerima acara "berita", data yang diterima dicetak dan acara "acara lain" dikirim ke server.
CATATAN: Nama acara default bawaan, seperti "Disconnect" berarti koneksi klien terputus, "pesan" berarti pesan diterima, dll. Untuk nama acara khusus, cobalah untuk tidak menggandakan nama dengan nama acara default yang dibangun di socket.io, agar tidak menyebabkan masalah yang tidak perlu.
4. API Umum Lainnya
1). Disiarkan ke semua klien: socket.broadcast.emit ('pesan siaran');
2). Masukkan ruangan (sangat mudah digunakan! Ini setara dengan namespace, yang dapat disiarkan ke kamar tertentu tanpa mempengaruhi klien di kamar lain atau tidak di kamar): socket.join ('nama kamar Anda');
3). Pesan siaran ke kamar (pengirim tidak dapat menerima pesan): socket.broadcast.to ('nama kamar Anda'). Emit ('Pesan Kamar Siaran');
4). Pesan siaran ke sebuah ruangan (termasuk pengirim dapat menerima pesan) (API ini milik io.sockets): io.sockets.in ('nama kamar lain'). Emit ('Pesan Kamar Siaran');
5). Force WebSocket Communication: (Client) Socket.send ('Hi'), (server) Gunakan socket.on ('pesan', fungsi (data) {}) untuk menerima.
5. Bangun ruang obrolan menggunakan socket.io
Akhirnya, kami mengakhiri artikel ini dengan contoh sederhana. Menggunakan Socket.io untuk membangun ruang obrolan adalah sekitar 50 baris kode, dan efek obrolan real-time juga sangat bagus. Kode kunci berikut diposting:
Server (socketchat.js)
Salinan kode adalah sebagai berikut:
// Kamus untuk koneksi klien, saat klien terhubung ke server,
// Socketid yang unik akan dihasilkan, dan kamus akan menahan pemetaan soketid untuk informasi pengguna (nama panggilan, dll.)
var connectionList = {};
exports.startchat = function (io) {
io.sockets.on ('connection', function (socket) {
// Simpan SocketID dan Nama Pengguna saat koneksi klien
var socketid = socket.id;
ConnectionList [SocketId] = {
Soket: Soket
};
// Pengguna memasuki acara ruang obrolan dan menyiarkan nama usernanya ke pengguna online lainnya
socket.on ('goint', function (data) {
socket.broadcast.emit ('broadcast_join', data);
ConnectionList [SocketID] .UserName = data.username;
});
// Pengguna meninggalkan insiden ruang obrolan dan menyiarkan kepergiannya ke pengguna online lainnya
Socket.on ('Disconnect', function () {
if (connectionList [socketid] .username) {
socket.broadcast.emit ('broadcast_quit', {
Nama Pengguna: Daftar Connection [SocketID] .UserName
});
}
Hapus ConnectionList [SocketID];
});
// insiden pidato pengguna, siarkan konten pidato mereka ke pengguna online lainnya
socket.on ('say', function (data) {
socket.broadcast.emit ('broadcast_say', {
Nama Pengguna: Daftar Connection [SocketID] .UserName,
Teks: data.text
});
});
})
};
Klien (socketchatclient.js)
Salinan kode adalah sebagai berikut:
var socket = io.connect ('http: // localhost');
// Setelah terhubung ke server, kirimkan acara "gabungan" segera dan beri tahu orang lain nama pengguna Anda
socket.emit ('gabungan', {
Nama pengguna: 'nama pengguna hehe'
});
// Setelah menerima siaran bergabung dengan ruang obrolan, pesan akan ditampilkan
socket.on ('broadcast_join', function (data) {
console.log (data.username + 'ditambahkan ke ruang obrolan');
});
// Setelah menerima siaran meninggalkan ruang obrolan, pesan ditampilkan
socket.on ('broadcast_quit', function (data) {
console.log (data.username + 'tinggalkan ruang obrolan');
});
// Setelah menerima pesan yang dikirim oleh orang lain, pesan akan ditampilkan
socket.on ('broadcast_say', function (data) {
console.log (data.username + 'katakanlah:' + data.text);
});
// Di sini kami berasumsi bahwa ada kotak teks teks dan tombol kirim.btn-send
// Bind Event menggunakan jQuery
$ ('. BTN-SEND'). Klik (fungsi (e) {
// Dapatkan teks kotak teks
var text = $ ('textarea'). val ();
// Kirim acara Say dan server akan menyiarkannya saat menerimanya.
socket.emit ('say', {
Nama pengguna: 'nama pengguna hehe'
Teks: Teks
});
});
Ini adalah demo ruang obrolan sederhana yang dapat Anda kembangkan sesuai keinginan Anda. Socket.io pada dasarnya adalah pengajuan dan pemrosesan penerimaan dari berbagai peristiwa, dan idenya sangat sederhana.