Rumah  >  Artikel  >  hujung hadapan web  >  panggilan prosedur jauh nodejs rpc

panggilan prosedur jauh nodejs rpc

王林
王林asal
2023-05-13 20:45:07630semak imbas

Node.js ialah persekitaran masa jalan JavaScript yang popular yang memudahkan untuk membangunkan aplikasi berprestasi tinggi. Salah satu kelebihan utama Node.js ialah sokongannya untuk model pengaturcaraan tak segerak yang boleh mengendalikan permintaan serentak tinggi dengan mudah. Pada masa yang sama, Node.js juga menyediakan banyak modul dan perpustakaan yang boleh digunakan untuk membina pelbagai jenis aplikasi.

Antaranya, RPC (Remote Procedure Call) ialah protokol rangkaian asas yang membolehkan satu program melaksanakan proses dalam program lain. Dengan menggunakan RPC, aplikasi boleh dengan mudah dipecahkan kepada bahagian bebas, setiap satunya boleh dijalankan pada mesin yang berbeza. Seni bina teragih ini meningkatkan prestasi aplikasi dan kebolehskalaan.

Sudah ada beberapa pustaka RPC yang bagus dalam Node.js, seperti dnode dan ampq, kedua-duanya membenarkan aplikasi Node.js melaksanakan RPC dengan mudah. Walau bagaimanapun, sebagai tambahan kepada perpustakaan ini, Node.js juga menyediakan beberapa modul terbina dalam yang boleh digunakan untuk melaksanakan RPC. Dalam artikel ini, kita akan melihat cara melaksanakan RPC menggunakan Node.js.

Prinsip Asas RPC

Protokol RPC membenarkan komunikasi antara dua program berbeza (klien dan pelayan). Pelanggan menghantar mesej permintaan, pelayan memproses permintaan dan menghantar mesej respons. Mesej permintaan dan respons boleh dalam sebarang format, biasanya menggunakan JSON atau XML.

Dalam protokol RPC, setiap proses mempunyai pengecam unik, dipanggil Nama Panggilan Prosedur. Setiap nama panggilan prosedur dikaitkan dengan fungsi yang melaksanakan panggilan prosedur jauh. Mesej permintaan RPC mengandungi nama panggilan prosedur dan parameter yang sepadan untuk dipanggil. Selepas pelayan menerima mesej permintaan, ia mencari fungsi yang sepadan dengan nama panggilan prosedur dan menghantar parameter kepada fungsi tersebut. Selepas fungsi dilaksanakan, hasilnya dikembalikan kepada klien.

Kelebihan RPC

Aplikasi yang menggunakan RPC untuk berkomunikasi mempunyai kelebihan berikut:

1 Seni bina teragih: RPC membenarkan aplikasi memecahkan tugas kepada berbilang bahagian Bebas yang boleh diedarkan pada mesin yang berbeza. Seni bina ini meningkatkan prestasi aplikasi dan kebolehskalaan serta mengurangkan risiko satu titik kegagalan.

2. Pemprosesan tak segerak: RPC menyokong model pemprosesan tak segerak, yang boleh mengendalikan sejumlah besar permintaan serentak dan meningkatkan prestasi aplikasi.

3. Ketelusan: RPC melindungi butiran antara aplikasi, membuat panggilan antara aplikasi sama seperti panggilan fungsi setempat. Ketelusan ini memudahkan pembangunan aplikasi.

Pelaksanaan RPC dalam Node.js

Terdapat banyak jenis pelaksanaan RPC dalam Node.js, anda boleh menggunakan perpustakaan pihak ketiga atau modul terbina dalam. Dalam artikel ini, kami akan memperkenalkan dua pelaksanaan RPC terbina dalam: net dan http.

1. Gunakan modul bersih untuk melaksanakan RPC

Modul bersih dalam Node.js menyediakan antara muka abstrak untuk soket TCP dan boleh digunakan untuk melaksanakan pelayan dan pelanggan Soket. Kita boleh menggunakan modul bersih untuk melaksanakan komunikasi RPC.

Berikut ialah contoh pelayan RPC mudah:

const net = require('net');

const server = net.createServer((socket) => {
  console.log('Client connected');

  // 处理socket数据
  socket.on('data', (data) => {
    console.log(`${data} received from client`);

    // 将请求数据解析为JSON对象
    const request = JSON.parse(data);

    // 执行方法并返回结果
    const result = callMethod(request.methodName, request.params);

    socket.write(JSON.stringify(result));
  });

  // 客户端断开连接
  socket.on('end', () => {
    console.log('Client disconnected');
  });

  // 处理错误
  socket.on('error', (err) => {
    console.log(`Error: ${err}`);
  });
});

// 监听端口
server.listen(8000, () => {
  console.log('Server started');
});

// 模拟方法调用
function callMethod(methodName, params) {
  switch (methodName) {
    case 'add':
      return add(params.a, params.b);
      break;
    case 'subtract':
      return subtract(params.a, params.b);
      break;
    default:
      return {result: 0, error: 'Method not found'};
  }
}

// 实现方法
function add(a, b) {
  return {result: a + b, error: null};
}

function subtract(a, b) {
  return {result: a - b, error: null};
}

Dalam kod contoh di atas, kami menggunakan modul bersih untuk mencipta pelayan TCP dan melaksanakan fungsi berikut:

1. Apabila pelanggan menyambung ke pelayan, ia mengeluarkan mesej.

2. Apabila pelayan menerima mesej, ia menghuraikan mesej dan melaksanakan kaedah yang sepadan.

3. Selepas melaksanakan kaedah, hantarkan semula hasilnya kepada klien sebagai rentetan JSON.

4. Apabila pelanggan memutuskan sambungan, keluarkan mesej.

2. Gunakan modul http untuk melaksanakan RPC

Modul http dalam Node.js menyediakan pelaksanaan pelayan HTTP dan klien. Kita boleh menggunakan modul http untuk melaksanakan komunikasi RPC. Melaksanakan komunikasi RPC menggunakan modul http memerlukan dua pelayan HTTP: satu untuk mengendalikan permintaan RPC dan satu lagi untuk mengendalikan permintaan HTTP biasa.

Berikut ialah contoh pelayan RPC yang dilaksanakan menggunakan modul http:

const http = require('http');
const url = require('url');

const rpcServer = http.createServer((req, res) => {
  const query = url.parse(req.url, true).query;

  // 解析请求参数
  const methodName = query.method;
  const params = JSON.parse(query.params);

  // 执行方法
  const result = callMethod(methodName, params);

  // 输出结果
  res.writeHead(200, {'Content-Type': 'application/json'});
  res.end(JSON.stringify(result));
});

// 监听端口
rpcServer.listen(8000, () => {
  console.log('RPC server started');
});

// 模拟方法调用
function callMethod(methodName, params) {
  switch (methodName) {
    case 'add':
      return add(params.a, params.b);
      break;
    case 'subtract':
      return subtract(params.a, params.b);
      break;
    default:
      return {result: 0, error: 'Method not found'};
  }
}

// 实现方法
function add(a, b) {
  return {result: a + b, error: null};
}

function subtract(a, b) {
  return {result: a - b, error: null};
}

Dalam kod contoh di atas, kami menggunakan modul http untuk mencipta pelayan RPC dan melaksanakan fungsi berikut:

1. Menghuraikan rentetan pertanyaan HTTP dan dapatkan kaedah dan parameter permintaan.

2. Jalankan kaedah yang sepadan dan hantarkan hasilnya kepada klien sebagai rentetan JSON.

Kelemahan RPC

Walaupun RPC memberikan banyak kelebihan, ia juga mempunyai beberapa kelemahan:

1. Struktur sistem yang kompleks: Untuk menggunakan protokol RPC, kita perlu mereka bentuk dan melaksanakan seni bina rangkaian yang kompleks. Ini akan meningkatkan kerumitan dan kos penyelenggaraan sistem dengan ketara.

2. Kependaman rangkaian: Memandangkan RPC perlu berkomunikasi melalui rangkaian, ia mungkin dipengaruhi oleh kependaman rangkaian. Ini boleh menjejaskan prestasi aplikasi.

3 Kebolehpercayaan komunikasi: Memandangkan RPC berkomunikasi melalui rangkaian, ia mungkin terjejas oleh ketidakstabilan rangkaian. Ini boleh menyebabkan kegagalan komunikasi, seterusnya menjejaskan prestasi aplikasi.

Kesimpulan

Dalam artikel ini, kami memperkenalkan cara melaksanakan komunikasi RPC dalam Node.js. Kami menunjukkan dua kaedah pelaksanaan RPC yang berbeza dengan menggunakan dua modul terbina dalam: net dan http. Walaupun RPC mempunyai beberapa kelemahan, ia masih merupakan protokol yang sangat berguna dan digunakan secara meluas dalam sistem teragih.

Atas ialah kandungan terperinci panggilan prosedur jauh nodejs rpc. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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