ホームページ > 記事 > ウェブフロントエンド > Node.js を使用してスクラッチ プロキシ サーバーを構築する方法
プロキシ サーバーがどのように動作し、インターネット上でデータをどのように提供するかについて興味があるかもしれません。このブログでは、コア NodeJs を使用してプロキシ サーバーを実装します。これは、NodeJs に既に付属している net と呼ばれるコア NodeJs パッケージを使用して実現しました。
プロキシ サーバーは、クライアントとサーバーの間のエージェントです。
のとき
クライアントがサーバーにリクエストを送信すると、ターゲット プロキシに転送されます
サーバ。ターゲットのプロキシ サーバーがリクエストを処理して送信します
メインサーバーに送信され、メインサーバーはバックリクエストを
に送信します。
プロキシサーバーとプロキシサーバーはリクエストをクライアントに送信します。
プログラミングを始める前は、ソケットと NodeJ についてほとんど知りません。ソケットとは何か、そしてそれらがどのように機能するかは知っています。
NodeJs でプロキシ サーバーを実装するには 2 つの方法があります。最初にカスタムメソッドを作成し、2 番目にインビルドを実行します。どちらもわかりやすいです
プロキシ サーバーをテストするには、ローカル マシン上でローカル HTTP サーバーを実行し、ホスト マシンをターゲットにすることができます。
const net = require('net'); // Define the target host and port const targetHost = 'localhost'; // Specify the hostname of the target server. For Ex: (12.568.45.25) const targetPort = 80; // Specify the port of the target server
const server = net.createServer((clientSocket) => { }); // Start listening for incoming connections on the specified port const proxyPort = 3000; // Specify the port for the proxy server server.listen(proxyPort, () => { console.log(`Reverse proxy server is listening on port ${proxyPort}`); });
サーバー関数のコールバックには、clientSocket パラメーターが 1 つあります。これは、接続のために受信したユーザー接続です。
ユーザーからのデータを受け入れて受信します
const targetHost = 'localhost'; // Specify the hostname of the target server. For Ex: (12.568.45.25) const targetPort = 80; // Specify the port of the target server // Create a TCP server const server = net.createServer((clientSocket) => { // Establish a connection to the target host net.createConnection({host: targetHost, port: targetPort}, () => { // When data is received from the client, write it to the target server clientSocket.on("data", (data) => { targetSocket.write(data); }); // When data is received from the target server, write it back to the client targetSocket.on("data", (data) => { clientSocket.write(data); }); }); });
clientSocket.on("data", (data) => { targetSocket.write(data); });
targetSocket.on("data", (data) => { clientSocket.write(data); });
プロキシ サーバーの機能を調べるのは興味深いことですが、信頼性を確保するには、予期しない問題を適切に処理するための堅牢なエラー処理方法が必要です。このような種類のエラーを処理するために、エラーと呼ばれるイベントがあります。実装はとても簡単です。
const server = net.createServer((clientSocket) => { // Establish a connection to the target host const targetSocket = net.createConnection({host: targetHost,port: targetPort}, () => { // Handle errors when connecting to the target server targetSocket.on('error', (err) => { console.error('Error connecting to target:', err); clientSocket.end(); // close connection }); // Handle errors related to the client socket clientSocket.on('error', (err) => { console.error('Client socket error:', err); targetSocket.end(); // close connection }); }); });
const net = require('net'); // Define the target host and port const targetHost = 'localhost'; // Specify the hostname of the target server const targetPort = 80; // Specify the port of the target server // Create a TCP server const server = net.createServer((clientSocket) => { // Establish a connection to the target host const targetSocket = net.createConnection({ host: targetHost, port: targetPort }, () => { // When data is received from the target server, write it back to the client targetSocket.on("data", (data) => { clientSocket.write(data); }); // When data is received from the client, write it to the target server clientSocket.on("data", (data) => { targetSocket.write(data); }); }); // Handle errors when connecting to the target server targetSocket.on('error', (err) => { console.error('Error connecting to target:', err); clientSocket.end(); }); // Handle errors related to the client socket clientSocket.on('error', (err) => { console.error('Client socket error:', err); targetSocket.end(); }); }); // Start listening for incoming connections on the specified port const proxyPort = 3000; // Specify the port for the proxy server server.listen(proxyPort, () => { console.log(`Reverse proxy server is listening on port ${proxyPort}`); });
クライアントとサーバーの接続の複雑さを軽減するために、メソッド パイプが組み込まれています。この構文を置き換えます
// Handle errors when connecting to the target server targetSocket.on("data", (data) => { clientSocket.write(data); }); // When data is received from the client, write it to the target server clientSocket.on("data", (data) => { targetSocket.write(data); });
この構文へ
// Pipe data from the client to the target clientSocket.pipe(targetSocket); // When data is received from the client, write it to the target server targetSocket.pipe(clientSocket);
const net = require('net'); // Define the target host and port const targetHost = 'localhost'; const targetPort = 80; // Create a TCP server const server = net.createServer((clientSocket) => { // Establish a connection to the target host const targetSocket = net.createConnection({ host: targetHost, port: targetPort }, () => { // Pipe data from the client to the target clientSocket.pipe(targetSocket); // Pipe data from the target to the client targetSocket.pipe(clientSocket); }); // Handle errors targetSocket.on('error', (err) => { console.error('Error connecting to target:', err); clientSocket.end(); }); clientSocket.on('error', (err) => { console.error('Client socket error:', err); targetSocket.end(); }); }); // Start listening for incoming connections const proxyPort = 3000; server.listen(proxyPort, () => { console.log(`Reverse proxy server is listening on port ${proxyPort}`); });
GitHub avinashtare をフォローしてください。ありがとうございます。
以上がNode.js を使用してスクラッチ プロキシ サーバーを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。