什么是RPC与GRPC!它们之间关系!

什么是RPC与GRPC!它们之间关系!

gprc与http对比,grpc为啥好,基本原理是什么?

区别:

rpc是远程过程调用,就是本地去调用一个远程函数,而http是通过url与restful风格的数据包去发送送和获取数据

rpc使用的一般编码协议更加高效,gprc使用protobuf编解码,而http使用的json进行编解码,数据相对于rpc更加直观,但是数据库大效率低下

rpc用于服务内部的互相调用,而http是用于和用户交互的

什么是RPC?

是指远程过程调用,一般用于异构的分布式系统之间的通信。让分布式应用之间的通信变得更加方便和高效

RPC的调用过程?

**RPC 架构包含4个核心组件:**客户端(Client)、客户端存根(Client Stub)、服务端(Server)及服务端存根(Server Stub)。

(1)客户端:服务的调用者。

(2)客户端存根:存放服务端的服务列表,将客户端请求打包并通过网络发送到服务端。

(3)服务端:服务提供者。

(4)服务端存根:接收客户端消息并解包,然后调用本地的方法。

主要包括:建立通信、服务寻址、网络传输、服务调用和返回!

在这里插入图片描述

(1)客户端以本地调用的方式发起调用,这时调用的其实是客户端存根。

(2)服务端存根在收到调用后,负责将被调用的方法名、参数等打包并编码成特定格式的能进行网络传输的消息体。

(3)客户端存根将消息体通过网络发送给服务端。

(4)服务端存根通过网络接收到消息,按照相应的格式进行拆包、解码,获取方法名和参数。

(5)服务端存根根据方法名和参数进行本地调用,这时调用的是真正的服务提供者。

(6)服务提供者调用本地服务,然后将结果返回给服务端存根。

(7)服务端存根将返回值打包并编码成消息。

(8)服务端存根通过网络将消息发送给客户端。

(9)服务端存根在收到消息后,进行拆包、解码并返回给客户端。

(10)服务端存根得到本次RPC调用的最终结果。

在RPC中一般会用到动态代理、序列化反序列化、NIO网络通信、服务注册和发现等技术。

什么是gRpc?

RPC是一个高性能、开源、通用的RPC框架。基于HTTP/2协议标准设计开发,默认采用Protocol Buffers数据序列化协议(Protocol Buffers基本语法),支持多种开发语言。gRPC提供了一种简单的方法来精确的定义服务,并且为客户端和服务端自动生成可靠的功能库。
在这里插入图片描述

什么是 Protocol Buffers(protobuf)?它与 XML 和 JSON 有什么区别?

首先protobuf使用的二进制编码,占用较少的存储空间和网络宽带!而XML和JSON都是使用文本格式的,占用空间和网络宽带都较大;

其次protobuf由于采用二进制编码和高效的序列化算法,可读性低,不能手动调式、支持多种数据类型,解析和序列化通常比XML和JSON要快、可读性高、可以手动调式!

如何定义一个消息类型和服务方法的protobuf文件?grpc支持哪些类型的服务方法?它们的区别是什么?

在 Protobuf 文件中定义消息类型和服务方法是定义 gRPC 服务的关键部分。以下是如何在 Protobuf 文件中定义消息类型和服务方法的示例,以及 gRPC 支持的不同类型的服务方法和它们的区别:

定义消息类型:

在 Protobuf 文件中,使用 message 关键字来定义消息类型。以下是一个示例:

protobufCopy codesyntax = "proto3";

message Person {
    string name = 1;
    int32 age = 2;
}

上述代码定义了一个名为 Person 的消息类型,它有两个字段 nameage

定义服务方法:

在 Protobuf 文件中,使用 service 关键字来定义服务。每个服务可以包含多个方法,每个方法都有输入和输出消息类型。以下是一个示例:

protobufCopy codesyntax = "proto3";

message Person {
    string name = 1;
    int32 age = 2;
}

service MyService {
    rpc GetPersonInfo (Person) returns (Person);
}

上述代码定义了一个名为 MyService 的服务,其中包含一个名为 GetPersonInfo 的方法,它的输入和输出都是 Person 消息类型。

gRPC 支持的服务方法类型:

gRPC 支持四种不同类型的服务方法:

  1. 单一请求-单一响应(Unary): 这是最常见的类型,客户端发送一个请求,服务器处理请求并返回单个响应。这种类型的方法类似于传统的函数调用。
  2. 客户端流(Client Streaming): 客户端可以连续地发送多个请求消息,服务器在收到所有请求后处理并返回单个响应。
  3. 服务器流(Server Streaming): 服务器发送多个响应消息,而客户端只发送单个请求消息。客户端可以在接收到响应的同时处理数据。
  4. 双向流(Bidirectional Streaming): 客户端和服务器都可以同时发送多个消息,客户端和服务器可以独立地读写数据。这种方法适用于实时通信和流式处理场景。

区别: 这些服务方法类型的区别在于数据流的方向和数量。单一请求-单一响应是最简单的,适用于普通的请求-响应场景。而客户端流和服务器流方法适用于需要流式处理的场景,它们可以在不同的时间发送多个请求或响应。双向流方法则支持客户端和服务器之间的双向流式通信,允许两端同时读写数据。

单一请求-单一响应是最简单的,适用于普通的请求-响应场景。而客户端流和服务器流方法适用于需要流式处理的场景,它们可以在不同的时间发送多个请求或响应。双向流方法则支持客户端和服务器之间的双向流式通信,允许两端同时读写数据。

选择服务方法类型应该根据实际需求来决定,根据数据流的方向和实时性要求来进行权衡。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值