Rumah >hujung hadapan web >tutorial js >Nodejs melaksanakan perkongsian permainan kecil untuk berbilang orang untuk menggerakkan tetikus dalam talian pada masa yang sama_node.js

Nodejs melaksanakan perkongsian permainan kecil untuk berbilang orang untuk menggerakkan tetikus dalam talian pada masa yang sama_node.js

WBOY
WBOYasal
2016-05-16 16:28:381665semak imbas

Baru-baru ini, disebabkan keperluan projek, saya telah mengkaji pelaksanaan websocket nodejs, socket.io, yang merupakan rangka kerja yang digunakan secara meluas untuk websocket dalam aplikasi latar belakang nodejs.

Persediaan

1. Pasang socket.io, gunakan arahan npm install socket.io
2. Untuk sistem windows, persekitaran kompilasi vc diperlukan, kerana apabila memasang socket.io, kod vc akan dikompilasi

Prinsip asas permainan

1. Pelayan memantau sambungan pelanggan
2. Apabila sambungan klien berjaya, ikat halaman untuk menggerakkan acara tetikus dan proses acara untuk menghantar koordinat semasa ke pelayan
3. Pelayan menyimpan objek koordinat global dan menggunakan nombor unik pelanggan sebagai nilai kunci
4. Apabila sambungan baharu datang, siarkan koordinat kepada pelanggan lain
5. Apabila pelanggan memutuskan sambungan, pelayan memadam maklumat koordinatnya dan menyiarkannya kepada pelanggan lain

Mula laksanakan kod pelayan

Apabila scoket.io mewujudkan pemantauan pelayan, ia perlu bergantung pada sambungan http untuk mengendalikan protokol naik taraf, jadi ia juga memerlukan modul http Kodnya adalah seperti berikut:

Salin kod Kod adalah seperti berikut:

var http = memerlukan('http'),
io = memerlukan('socket.io');


var app = http.createServer().listen(9091);

var ws = io.listen(app);

Kemudian tentukan objek koordinat global

Salin kod Kod adalah seperti berikut:

var kedudukan = {};

Mula memantau sambungan pelanggan dan menambah fungsi siaran (sebenarnya, anda boleh menggunakan kaedah penyiaran io.sockets.broadcast.emit yang disertakan dengan socket.io Kod teras adalah seperti berikut:

).

Salin kod Kod adalah seperti berikut:

ws.on('sambungan', fungsi(klien){
// Fungsi penyiaran
var broadcast = function(msg, cl){
untuk(var k dalam ws.sockets.sockets){
Jika(ws.sockets.sockets.hasOwnProperty(k)){
Jika(ws.sockets.sockets[k] && ws.sockets.sockets[k].id != cl.id){
Ws.sockets.sockets [k] .emit ('posity.change', msg);                 }
            }
}
};
console.log(' // Selepas pelanggan berjaya menyambung, maklumat koordinat pelanggan lain akan dihantar
Client.emit('position.change', positions);
// Terima mesej yang dihantar oleh pelanggan
Client.on('position.change', function(msg){
                                        // Pada masa ini mesej pelanggan hanyalah mesej koordinat
        jawatan[client.id] = msg;
               // Siarkan mesej kepada semua pelanggan lain
siaran ({
            jenis: 'kedudukan',
Jawatan: msg,
              id: client.id
          }, pelanggan);
});
// Terima mesej sambungan penutup klien
Client.on('close', function(){
console.log('close!');
//Padam pelanggan dan maklumkan pelanggan lain
                                                                                                                                                                                                                                                                                                            padamkan siaran [client.id];
               // Siarkan mesej kepada semua pelanggan lain
siaran ({
            jenis: 'putuskan sambungan',
              id: client.id
          }, pelanggan);
});
// Putuskan sambungan
Client.on('disconnect', function(){
console.log('putuskan sambungan!');
//Padam pelanggan dan maklumkan pelanggan lain
                                                                                                                                                                                                                                                                                                            padamkan siaran [client.id];
               // Siarkan mesej kepada semua pelanggan lain
siaran ({
            jenis: 'putuskan sambungan',
              id: client.id
          }, pelanggan);
})
// Tentukan pengendalian pengecualian klien
Client.on('error', function(err){
console.log('error->', err);
})
});


Menganalisis kod di atas, perkara utama ialah

1. Pelanggan baharu berjaya menyambung dan menghantar maklumat koordinat pelanggan lain

2. Apabila pelanggan mengemas kini maklumat koordinat, ia memberitahu pelanggan lain

3. Pelanggan memutuskan sambungan dan memberitahu pelanggan lain
4. Jenis mesej siaran dibahagikan kepada mengubah suai koordinat dan mengalih keluar koordinat

Tulis halaman html pelanggan

Memandangkan socket.io ialah rangka kerja tersuai, pelanggan perlu merujuk socket.io.js ini boleh didapati dalam modul socket.io secara amnya node_modulessocket.ionode_modulessocket.io-clientdist. dan Mampatkan dua versi, dan anda boleh menggunakan versi gabungan semasa pembangunan

Kod lengkap adalah seperti berikut:


Salin kod Kod adalah seperti berikut:




socket.io Berbilang orang berinteraksi dalam talian pada masa yang sama Contoh