【ASP.NET Core学习】远程过程调用 - gRPC使用
2021-05-07 17:27
标签:png 翻译 names 轻量 流式处理 地方 开源 一起 默认 本文介绍在gRPC使用,将从下面几个方面介绍 什么是RPC 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框架,有以下几个特点 协定优先 API 开发,默认使用protobuf,允许与语言无关的实现。(这里涉及两点,1.面向接口开发,依赖抽象而不是具体,2. 可以不同语言实现协作) 使用 Protobuf 二进制序列化减少对网络的使用。(减少网络传输) 可用于多种语言的工具,以生成强类型服务器和客户端。 支持客户端、服务器和双向流式处理调用。 下面开始介绍如何在Net Core上使用gRPC 一、安装dotnet-gRPC工具(用于引用protobuf文件,生成客户端/服务端代码) 二、新建一个protobuf文件 三、新建一个服务端 1. 新建一个gRPC工程 2. 引入步骤二生成的protobuf文件(可以使用通配符引入多个protobuf文件) 3. 新建服务类 4. 配置grpc服务类终结点 四、新建客户端 1. 新建控制台程序 2. 添加包(Google.Protobuf) 3. 引入步骤二生成的protobuf文件(可以使用通配符引入多个protobuf文件),注意:这里需要生成是客户端代码,当然也可以用Both参数生成 五、运行 1. 运行服务端 2. 启动客户端 客户端输出下面信息 {"Code":1,"Message":"\u53D1\u9001\u6210\u529F"} 六、小结 gRPC的生命周期 Client(发送请求) -> Client stub(压缩/解压) -> Client RPC Transfer(发送/接收) -> Server RPC Transfer(接收/发送) -> Server stub(解压/压缩) -> Server (处理响应) gPRC帮我们隐藏中间的环节,只剩下两头的代码(俗称业务逻辑代码) protobuf它是一种可序列化的数据结构,但它更重要是定义接口,让服务端和客户端能分离出来 转发请标明出处:https://www.cnblogs.com/WilsonPan/p/12000796.html 示例代码:https://github.com/WilsonPan/AspNetCoreExamples/tree/master/gRPC 【ASP.NET Core学习】远程过程调用 - gRPC使用 标签:png 翻译 names 轻量 流式处理 地方 开源 一起 默认 原文地址:https://www.cnblogs.com/WilsonPan/p/12000796.html
dotnet tool install dotnet-grpc -g
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;
}
dotnet new grpc -n gRPC.Services
dotnet-grpc add-file ..\gRPC.Protos\*.proto -s Serve
public class SmsService : SmsSender.SmsSenderBase
{
private readonly ILogger
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService
dotnet new console -n gRPC.Client
dotnet add package Google.Protobuf
dotnet-grpc add-file ..\gRPC.Protos\*.proto -s Client
上一篇:假如React没了JSX
下一篇:CSS position定位
文章标题:【ASP.NET Core学习】远程过程调用 - gRPC使用
文章链接:http://soscw.com/essay/83767.html