Node.js—RPC通信

Remote Procedure Call —— 遠程過程調用

與ajax的相同點:
1.都是兩個計算機之間的網絡通信
2.需要雙方約定一個數據格式
與ajax的不同點:

  1. 不一定使用DNS作爲尋址服務(RPC一般是在內網裏面互相請求)
  2. 應用層協議一般不使用http(RPC使用二進制協議)
  3. 基於TCP或UDP協議

5月13號更新

尋址/負載均衡

ajax:使用DNS進行尋址(瀏覽器把域名發送給DNS轉換成IP再返回給瀏覽器,瀏覽器再用這個IP去拿到數據。)
RPC:使用特有服務進行尋址。(利用統一標識符,例如id、vip發送給尋址服務器,尋址服務器再把IP返回給客戶端服務器。然後客戶端服務器將IP返回給另一臺服務器再拿到數據。)

TCP通信
  1. 單工通信(永遠只有一方給另一方發送數據)
  2. 半雙工通信(同一時間內只有一端能給另外一端發送數據——輪番單工通信。)
  3. 全雙工通信(客戶端和服務端均可自由的通信。)
RPC調用二進制協議(二進制流0和1的形式)

http則是html和json的形式

  1. 更小的數據包體積
  2. 更快的解編碼的速率
Node.js Buffer編解碼二進制數據包

用處:處理TCP文件流的一些數據以及文件系統的一些數據
菜鳥教程的解釋:

JavaScript 語言自身只有字符串數據類型,沒有二進制數據類型。

但在處理像TCP流或文件流時,必須使用到二進制數據。因此在 Node.js中,定義了一個 Buffer 類,該類用來創建一個專門存放二進制數據的緩存區。

在 Node.js 中,Buffer 類是隨 Node 內核一起發佈的核心庫。Buffer 庫爲 Node.js 帶來了一種存儲原始數據的方法,可以讓 Node.js 處理二進制數據,每當需要在 Node.js 中處理I/O操作中移動的數據時,就有可能使用 Buffer 庫。原始數據存儲在 Buffer 類的實例中。一個 Buffer 類似於一個整數數組,但它對應於 V8 堆內存之外的一塊原始內存。
const buffer1 = Buffer.from('huanyue');
const buffer2 = Buffer.from([0,1,2,3,4]);

const buffer3 = Buffer.alloc(20);

console.log(buffer1);
console.log(buffer2);
console.log(buffer3);

輸出結果:
在這裏插入圖片描述

安裝buffer包:

npm install protocol-buffers

在這裏插入圖片描述
可是我寫了一個小demo奇妙的報錯了:(未解決報錯)
在這裏插入圖片描述
文件夾目錄結構:
在這裏插入圖片描述
index.js部分的代碼:

const fs = require('fs');
const protobuf = require('protocol-buffers');
const schema = protobuf(fs.readFileSync(__dirname + 'test.proto','utf-8'));

console.log(schema);

const buffer  = schema.Column.encode({
    id: 1,
    name: Node.js,
    price: 99.99
});
console.log(schema.Column.decode(buffer));

test.proto部分代碼:

message Column  {
    required int32 id = 1;
    required string name = 2;
    required float price = 3
}

查了一些博客,但是還沒有眉目,稍後再看看吧~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章