Nodejs membina rangkaian p2p

王林
Lepaskan: 2023-05-12 09:20:06
asal
840 orang telah melayarinya

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.

Apakah 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.

Membina rangkaian P2P menggunakan Node.js

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:

Langkah 1: Sediakan pelayan

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');
});
Salin selepas log masuk

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.

Langkah 2: Tambah Logik P2P

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);
}
Salin selepas log masuk

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()

Langkah 3: Uji Rangkaian P2P

Kami kini telah berjaya menyediakan pelayan pusat dan menambah logik P2P supaya nod boleh berkomunikasi antara satu sama lain. Seterusnya, kita perlu menguji rangkaian P2P. Berikut ialah contoh kod yang boleh digunakan untuk menguji rangkaian P2P:

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);
Salin selepas log masuk
Dalam kod di atas, kami mula-mula memperkenalkan dua nod

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()

Kesimpulan

Menggunakan Node.js, kami boleh membina aplikasi rangkaian P2P dengan mudah. Pelayan pusat akan menguruskan semua nod dan menggabungkannya dengan logik P2P untuk membolehkan nod berkomunikasi antara satu sama lain. Kelebihan penggunaan perpustakaan

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

Adalah penting untuk ambil perhatian bahawa aplikasi rangkaian P2P mungkin tertakluk kepada serangan dan risiko kerana semua nod adalah sama. Oleh itu, apabila membina aplikasi rangkaian P2P, pastikan untuk mengecualikan nod berniat jahat dan pertimbangkan untuk melaksanakan langkah keselamatan untuk melindungi semua nod.

Atas ialah kandungan terperinci Nodejs membina rangkaian p2p. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!