Dalam pembangunan rangkaian sebelumnya, apabila pemajuan data diperlukan, selalunya diperlukan untuk mendapatkan alamat IP pelanggan. Untuk aplikasi yang dibangunkan menggunakan Node.js, keperluan untuk mendapatkan alamat IP klien dan data ke hadapan juga sangat biasa. Artikel ini akan memperkenalkan pembaca kepada cara mendapatkan alamat IP pelanggan dan cara memajukan data dalam Node.js untuk membantu pembaca membangunkan aplikasi rangkaian dengan lebih baik.
Dapatkan alamat IP pelanggan
Sebelum memahami cara mendapatkan alamat IP pelanggan, kita perlu terlebih dahulu memahami beberapa konsep dalam pengepala permintaan HTTP. Dalam pengepala permintaan HTTP, terdapat medan pengepala yang dipanggil X-Forwarded-For (XFF) Medan ini biasanya ditambahkan oleh pelayan proksi apabila memajukan permintaan ke pelayan akhir. Ia mengandungi satu siri alamat IP, yang mewakili alamat IP sebenar permintaan selepas melalui berbilang pelayan proksi, dan alamat IP terakhir ialah alamat IP sebenar pelanggan.
Dalam Node.js, kami boleh mendapatkan alamat IP pelanggan dengan mengakses pengepala permintaan. Berikut ialah contoh kod:
const http = require('http'); http.createServer((req, res) => { console.log(req.headers['x-forwarded-for'] || req.socket.remoteAddress); res.end('Hello World!'); }).listen(3000);
Dalam kod di atas, kami telah menggunakan req.headers['x-forwarded-for']
untuk mendapatkan alamat IP pelanggan. Jika medan ini tidak ada, kami menggunakan req.socket.remoteAddress
untuk mendapatkan alamat IP jauh permintaan, kerana dalam kebanyakan kes alamat IP ini juga merupakan alamat pelanggan.
Perlu diambil perhatian bahawa sesetengah pelayan proksi mungkin tidak menambah medan pengepala XFF pada permintaan. Dalam kes ini, kami perlu mempertimbangkan cara lain untuk mendapatkan alamat IP pelanggan.
Pemajuan data
Dalam reka bentuk dipacu domain (DDD), pemajuan data merujuk kepada pemindahan sekeping data antara berbilang sistem supaya sistem ini boleh berkongsi data dan berfungsi bersama. Kaedah pemajuan ini kebanyakannya digunakan dalam sistem teragih berskala besar. Dalam aplikasi Node.js, pemajuan data biasanya digunakan dalam aplikasi rangkaian kerana ia membantu dengan perkara seperti pengimbangan beban dan pengelompokan. Di bawah ini kami akan memperkenalkan dua kaedah untuk melaksanakan pemajuan data: WebSocket dan pemajuan HTTP.
WebSocket Forwarding
WebSocket ialah protokol berasaskan TCP yang membenarkan penubuhan saluran komunikasi dua hala antara pelanggan dan pelayan. Dalam Node.js, kita boleh menggunakan modul WebSocket untuk melaksanakan pemajuan data.
Berikut ialah contoh kod yang menggunakan WebSocket untuk pemajuan data:
const WebSocket = require('ws'); const server = new WebSocket.Server({ port: 8080 }); server.on('connection', (socket) => { console.log('A new client connected'); socket.on('message', (message) => { console.log(`Received message from client: ${message}`); // 将消息广播给其他客户端 server.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN && client !== socket) { client.send(message); } }); }); socket.on('close', () => { console.log('A client disconnected'); }); });
Dalam kod di atas, kami menggunakan modul WebSocket untuk mencipta pelayan WebSocket, dan kemudian mendengar acara sambungan pelanggan. Apabila pelanggan menyambung ke pelayan WebSocket, kami akan mengeluarkan mesej segera kepada konsol. Kemudian, apabila mesej diterima daripada pelanggan, kami menyiarkan mesej ini kepada pelanggan lain pada pelayan. Akhir sekali, apabila pelanggan memutuskan sambungan, kami juga akan mengeluarkan maklumat segera yang sepadan kepada konsol.
Pemajuan HTTP
Cara lain untuk melaksanakan pemajuan data ialah melalui permintaan HTTP. Dalam Node.js, kami boleh menggunakan modul http untuk melaksanakan pemajuan data Contoh kod adalah seperti berikut:
const http = require('http'); http.createServer((req, res) => { const options = { hostname: 'localhost', port: 8080, path: req.url, method: req.method, headers: req.headers }; const proxyReq = http.request(options, (proxyRes) => { res.writeHead(proxyRes.statusCode, proxyRes.headers); proxyRes.pipe(res); }); req.pipe(proxyReq); }).listen(3000);
Dalam kod di atas, kami menggunakan modul http untuk mencipta pelayan HTTP. Apabila kami menerima permintaan HTTP daripada pelanggan, kami memajukan permintaan itu ke pelayan lain. Untuk melakukan ini, kami mencipta pembolehubah proxyReq
dan menggunakan kaedah http.request()
untuk menghantar permintaan ke pelayan lain. Apabila kami menerima respons daripada pelayan lain, kami menulis pengepala respons kepada respons menggunakan kaedah res.writeHead()
dan menghantar badan respons kembali kepada klien menggunakan aliran respons.
Ringkasan
Dalam artikel ini, kami memperkenalkan pembaca tentang cara mendapatkan alamat IP pelanggan dalam Node.js, serta dua kaedah pemajuan data yang biasa digunakan: WebSocket dan pemajuan HTTP. Teknologi ini boleh membantu kami membangunkan aplikasi rangkaian dengan lebih baik dan meningkatkan prestasi aplikasi serta kebolehskalaan. Pada masa yang sama, kita juga perlu memberi perhatian sepenuhnya kepada keselamatan rangkaian untuk memastikan keselamatan dan kebolehpercayaan aplikasi.
Atas ialah kandungan terperinci ip pelanggan ke hadapan nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!