gRPC学习笔记(一)——入门介绍

2022-02-21  本文已影响0人  简单一点点

通过三篇笔记简单介绍下 gRPC,后续进行代码实践。

gRPC 介绍

gRPC 是一个高性能、跨平台、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。

当前几乎所有主流语言都支持 gRPC,在 gRPC 里客户端应用可以像调用本地方法一样直接调用另一台机器上服务端应用的方法。

要使用 gRPC :首先使用接口定义语言(interface definition language, IDL)定义一个服务,定义能够被远程调用的方法(包含参数和返回类型)。借助服务定义,可以生成服务端代码,也就是服务端骨架(skeleton)和客户端代码,即客户端存根(stub)。这样客户端就能够调用我们在服务接口中指定的方法。

服务定义

gPRC 使用 protocol buffers 作为 IDL 来定义接口,protocol buffers 是语言中立、平台无关、实现结构化数据序列化的可扩展机制。

服务接口定义在 proto 文件中指定,下面给出一个使用 protocol buffers 定义服务的文件。

// protocol buffers版本为 proto3
syntax = "proto3";
// 用来防止协议消息类型命名冲突的包名,也可用来生成代码
package helloproto;

// 定义gRPC服务接口
service Greeter {
    // 远程调用方法,可以添加多个
    rpc sayHello(HelloRequest) returns (HelloReply) {}
}

// 定义 HelloRequest 的消息格式
message HelloRequest {
    string name = 1;
    string description =2;
}

// 定义 HelloReply 的消息格式
message HelloReply {
    string value = 1;
}

服务就是一组可以被远程调用的方法,其输入参数和返回参数可以是用户定义类型(例如我们的示例),也可以是 protocol buffers 中的类型,它们被构造成消息。消息中包含一系列的字段,每个字段有唯一的编号。

消息传输

在调用 gRPC 服务时,客户端会将 RPC 请求封装(marshal)为 protocol buffers 格式,然后将其通过 HTTP/2 进行发送。服务端接收到请求后会解析(unmarshal),对应的过程调用同样使用 protocol buffers 执行,然后遵循与请求类似的流程返回响应报文。

gRPC 通信模式

gRPC 主要包含四种通信模式:

gRPC的特点

gRPC优势

gRPC 越来越受欢迎,是因为它有着一些关键的优势。

gRPC劣势

当然,gRPC也存在着一些劣势:

上一篇 下一篇

猜你喜欢

热点阅读