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
}

查了一些博客,但是还没有眉目,稍后再看看吧~

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