当前位置:首页 > Web开发 > 正文

但它更重要是定义接口

2024-03-31 Web开发

RPC是Remote Procedure Call简称,翻译过来是长途过程挪用。它是一个进程间的通讯技术,基于Client-Server模式,让措施像挪用当处所法一样使用,而无需去关系它细节如何实现。

上面是我的理解,怕理解有错或者表达禁绝确,下面引用维基百科

维基百科 a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared network), which is coded as if it were a normal (local) procedure call, without the programmer explicitly coding the details for the remote interaction

网上找到一个图,对照形象描述RPC挪用过程

技术图片

什么时候需要RPC

RPC是解决进程间通讯(可以是同一个处事器,也可以是差别处事器的进程间,但是凡是是内网的差别处事器之间进程通讯)。 

解决进程间通信,Web Api也是可以解决,为什么还需要RPC?我认为可以从下面几点

1. Web Api是基于HTTP,RPC可以是HTTP,也可以是TCP,甚至基于Socket,RPC框架凡是都是隐藏通讯细节,让我们无感知使用

2. Web Api 凡是基于JSON格局,XML格局,这种格局易读性强,但是随之带来就是传输过程需要把数据的元数据也带进去传输

3. Web Api更多应用场景是供给方界说好接口,由客户端按需挪用,RPC凡是需要挪用方和供给方相同一起界说接口

所以PRC更多是使用以下场景

对通讯性能要求较高

微处事

点到点通讯

gRPC使用

gRPC是Google开源的高性能RPC框架,有以下几个特点

现代高性能轻量级 RPC 框架。

协定优先 API 开发,默认使用protobuf,允许与语言无关的实现。(这里涉及两点,1.面向接口开发,依赖抽象而不是具体,2. 可以差别语言实现协作)

使用 Protobuf 二进制序列化减少对网络的使用。(减少网络传输)

可用于多种语言的工具,以生成强类型处事器和客户端。

撑持客户端、处事器和双向流式措置惩罚惩罚挪用。

下面开始介绍如安在Net Core上使用gRPC

一、安置dotnet-gRPC工具(用于引用protobuf文件,生成客户端/处事端代码)

dotnet tool install dotnet-grpc -g

二、新建一个protobuf文件

syntax = "proto3"; option csharp_namespace = "gRPC.Services"; package sms; // The greeting service definition. service SmsSender { // Sends a greeting rpc SendSms (SmsRequest) returns (SmsResponse); } // The request message containing the user‘s name. message SmsRequest { string tel = 1; string content = 2; } // The response message containing the greetings. message SmsResponse { int32 code = 1; string message = 2; }

三、新建一个处事端

1. 新建一个gRPC工程

dotnet new grpc -n gRPC.Services

2. 引入法式二生成的protobuf文件(可以使用通配符引入多个protobuf文件)

dotnet-grpc add-file ..\gRPC.Protos\*.proto -s Serve

3. 新建处事类

public class SmsService : SmsSender.SmsSenderBase { private readonly ILogger<SmsService> _logger; public SmsService(ILogger<SmsService> logger) { _logger = logger; } public override Task<SmsResponse> SendSms(SmsRequest request, ServerCallContext context) { return Task.FromResult(new SmsResponse { Code = 1, Message = "发送告成" }); } }

SmsSender 是生成工具生成的处事端代码

4. 配置grpc处事类终结点

app.UseEndpoints(endpoints => { endpoints.MapGrpcService<SmsService>(); });

四、新建客户端

1. 新建控制台措施

dotnet new console -n gRPC.Client

2. 添加包(Google.Protobuf)

dotnet add package Google.Protobuf

3. 引入法式二生成的protobuf文件(可以使用通配符引入多个protobuf文件),注意:这里需要生成是客户端代码,固然也可以用Both参数生成

dotnet-grpc add-file ..\gRPC.Protos\*.proto -s Client

五、运行

1. 运行处事端

2. 启动客户端

客户端输出下面信息

{"Code":1,"Message":"\u53D1\u9001\u6210\u529F"}

六、小结

gRPC的生命周期

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/33208.html