什么是gRPC

本文介绍了RPC基本概念,gRPC与protocol buffers。适合入门阅读

TL;DR

  • RPC描述了如何使用远程对象或方法就像在本地一样
  • gRPC使用protocol buffers作为其接口定义语言(IDL)和其基础消息交换格式
  • node 实例

gRPC是RPC框架

RPC(Remote Procedure Call)—远程过程调用。简单来说,就是我在本地调用了一个函数,或者对象的方法,实际上是调用了远程机器上的函数,或者远程对象的方法,但是这个通信过程对于程序员来说是透明的,即达到了一种位置上的透明性。RPC是一种技术思想而非一种规范。协议只规定了 Client 与 Server 之间的点对点调用流程,包括 stub、通信协议、RPC 消息解析等部分,在实际应用中,还需要考虑服务的高可用、负载均衡等问题

gRPC与protocol buffers

gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,提供多语言支持。

gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

gRPC 使用 ProtoBuf 作为其 IDL。

与许多RPC系统一样,gRPC基于定义服务的思想,指定可以使用其参数和返回类型远程调用的方法。 在服务器端,服务器实现此接口并运行gRPC服务器来处理客户端调用。 在客户端,客户端有一个存根(在某些语言中称为客户端),它提供与服务器相同的方法。 protocol buffers 用于数据序列化。如下定义了person的结构

meassage Person {
 string name = 1;
 int32 id= 2;
 boo has_ponycopter = 3
}
复制代码

使用 protocol buffers 编译器protoc可以生成对应语言的数据访问类,并生成访问器如name(), set_name(),以及 serialize/parse方法

定义Greeter service

service Greeter {
 rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloResquest {
 string name = 1;
}

message HelloReply {
 string message = 1;
}
复制代码

node实现gRPC server与client

gRPC支持多种语言。在node中,有两种方式使用protocol buffers。一种是使用Protobuf.js在运行时动态生成代码,另一种是使用protoc编译器生成静态的代码。

定义service

protocol buffer文件以.proto后缀名

service指定服务、rpc指定方法名、message 指定类型

message Point {
  int32 latitude = 1;
  int32 longitude = 1;
}
service RouteGuide {
  rpc GetFeature(Point) returns (Feature) {}
  
  rpc ListFeatures(Rectangle) returns (stream Feature) {}
}
复制代码
使用@grpc/proto-loader加载proto

动态运行

创建server

根据protocol buffer描述的service实现rpc方法

function getFeature(args) {
  // implement
}

var server = new grpc.Server();
server.addProtoService(
  routeguide.RouteGuide.service, 
  {
    getFeature: getFeature,
  }
);
server.bind('0.0.0.0:50051')
复制代码
创建clinet

首先要加载proto,才能知道服务端service的描述。 创建服务端的一个stub

// 指定server0.0.0.0:50051
var client = new routeguide.RouteGuide(
    'localhost:50051', 
    grpc.credentials.createInsecure()
);

client.getFeature()
复制代码

gRPC Basics - Node.js详细内容

转载于:https://juejin.im/post/5d3a9ebc6fb9a07ee85c7059

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值