Node.js ialah persekitaran masa jalan JavaScript yang berjalan pada bahagian pelayan Ia sangat mudah dan mudah digunakan untuk pembangun. Ia ringan dan boleh melaksanakan pengkomputeran teragih pada skala global. Oleh itu, Node.js sesuai untuk membina aplikasi rangkaian P2P. Dalam artikel ini, kita akan melihat cara menggunakan Node.js untuk membina rangkaian P2P.
Rangkaian P2P ialah kaedah sambungan rangkaian terpencar Ia tidak mempunyai pelayan pusat seperti model pelayan-pelanggan. Semua nod adalah sama dan mereka boleh berkomunikasi dan bertukar data antara satu sama lain. Rangkaian P2P biasanya digunakan untuk aplikasi seperti perkongsian fail, penstriman video dan permainan dalam talian. Satu kelebihan rangkaian P2P ialah ia mengelakkan satu titik kegagalan dan meningkatkan ketersediaan sistem. Walau bagaimanapun, rangkaian P2P juga terdedah kepada nod berniat jahat dan kelemahan keselamatan.
Node.js dibina pada model I/O tanpa sekatan berasaskan peristiwa. Ini bermakna ia sangat sesuai untuk mengendalikan aplikasi rangkaian, terutamanya aplikasi rangkaian P2P. Berikut ialah proses langkah demi langkah:
Mula-mula, anda perlu menyediakan pelayan pusat yang akan bertanggungjawab untuk menyambungkan semua nod dan menjalankan protokol rangkaian P2P yang diperlukan. Pelayan ini akan berfungsi di atas pelayan soket web dan meminta pelanggan soket web menyambung kepadanya. Dalam Node.js anda boleh menggunakan perpustakaan Socket.io untuk mencapai ini. Contoh berikut menunjukkan cara menyediakan pelayan menggunakan Socket.io:
const http = require('http'); const express = require('express'); const socket_io = require('socket.io'); const app = express(); const server = http.createServer(app); const io = socket_io(server); io.on('connection', (socket) => { console.log('a user connected'); socket.on('disconnect', () => { console.log('user disconnected'); }); }); server.listen(3000, () => { console.log('listening on *:3000'); });
Dalam kod di atas, kami mula-mula memuatkan modul http
terbina dalam Node.js dan rangka kerja express
. Kemudian, kami mencipta pelayan http
dan mengaitkannya dengan rangka kerja express
. Seterusnya, kami memasang pustaka socket.io
dan menyambungkannya ke pelayan ini. Akhir sekali, kami menambah io.on()
pendengar acara pada pelayan menggunakan kaedah connection
dan log semua acara sambungan dan pemutusan sambungan pada konsol.
Dalam aplikasi rangkaian P2P, nod berkomunikasi secara langsung dengan nod lain dan bukannya dengan pelayan pusat. Oleh itu, kita perlu menambah logik P2P untuk setiap nod. Berikut ialah contoh kod yang akan menambah logik P2P pada setiap nod supaya mereka boleh berkomunikasi antara satu sama lain melalui pelayan pusat:
const io_client = require('socket.io-client'); const socket = io_client.connect('http://localhost:3000'); socket.on('connect', () => { console.log('connected to the central server'); socket.emit('join', { id: 'node1' }); }); socket.on('disconnect', () => { console.log('disconnected from the central server'); }); socket.on('message', (message) => { console.log('received message:', message); }); socket.on('peer_connect', (id) =>{ console.log(`peer ${id} connected`); }); socket.on('peer_disconnect', (id) =>{ console.log(`peer ${id} disconnected`); }); function send_message(message){ socket.emit('message', message); } function connect_to_peer(peer_id){ socket.emit('connect_to_peer', peer_id); }
Dalam kod di atas, kami menggunakan perpustakaan socket.io-client
untuk mencipta nod yang dipanggil 🎜> nod baharu dan sambungkannya dengan pelayan pusat. Apabila nod bersambung ke pelayan pusat, ia akan menghantar acara socket
supaya pelayan mengetahui tentang kewujudan nod. Kami juga menambah pendengar acara tambahan pada setiap nod seperti join
, message
, peer_connect
, dsb. supaya mereka boleh berkomunikasi dengan nod lain. Kami juga menambah dua kaedah pembantu, peer_disconnect
dan send_message()
. Yang pertama boleh menghantar mesej ke nod lain, dan yang terakhir akan meminta nod untuk menyambung ke rakan sebaya yang lain. connect_to_peer()
const peer1 = require('./peer1.js'); const peer2 = require('./peer2.js'); peer1.connect_to_peer('node2'); peer1.send_message('hello world!'); setTimeout(() => { peer1.disconnect(); peer2.disconnect(); }, 5000);
dan peer1
. Kami kemudian meminta peer2
untuk menyambung ke nod peer1
dan menghantar mesej kepadanya menggunakan kaedah node2
. Selepas 5 saat, kami menutup sambungan semua nod melalui kaedah send_message()
. disconnect()
kami ialah ia boleh mengembangkan rangkaian P2P dengan mudah dan menyediakan sambungan yang pantas, selamat dan boleh dipercayai. Node.js juga menyediakan model dipacu peristiwa yang berkuasa, menjadikan pembangunan dan penyelenggaraan aplikasi rangkaian P2P lebih mudah. socket.io
Atas ialah kandungan terperinci Nodejs membina rangkaian p2p. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!