怎么查看网站是否被收录,企业宣传片的制作流程,cms高端建站,网站备案 加急gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。https://grpc.io/docs/guides/https://github.com/grpc/grpc-dotnethttps://docs.microsoft.com/zh-cn/aspnet/core/grpc“gRPC 的主要优点现代高性能轻量级 RPC 框架。协定优先 API 开发#xff0c;默认使用协议缓冲区… gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。https://grpc.io/docs/guides/https://github.com/grpc/grpc-dotnethttps://docs.microsoft.com/zh-cn/aspnet/core/grpc“gRPC 的主要优点现代高性能轻量级 RPC 框架。协定优先 API 开发默认使用协议缓冲区允许与语言无关的实现。可用于多种语言的工具以生成强类型服务器和客户端。支持客户端、服务器和双向流式处理调用。使用 Protobuf 二进制序列化减少对网络的使用。“这些优点使 gRPC 适用于效率至关重要的轻量级微服务。需要多种语言用于开发的 Polyglot 系统。需要处理流式处理请求或响应的点对点实时服务。gRPC 现在可以非常简单的在 .NET Core 和 ASP.NET Core 中使用并且已经开源它目前由微软官方 ASP.NET 项目的人员进行维护良好的接入 .NET Core 生态。接下来演示如何使用 gRPC要想使用 gRPC 需要 .NET Core 3.1或者以上的SDK支持。gRPC分服务端和客户端所以新建两个项目一个控制台当作客户端gRPC_ClientDemo一个ASP.NET Core 项目当作服务端gRPC_ServerDemo。先将服务端搞定添加Grpc.AspNetCore组件Install-Package Grpc.AspNetCore
然后Startup.cs中添加services.AddGrpc()。public void ConfigureServices(IServiceCollection services)
{services.AddGrpc();
}
因为 gRPC 是基于 HTTP/2 来通信的所以需要在配置文件中添加Kestrel 启用 HTTP/2 的配置。{Kestrel: {EndpointDefaults: {Protocols: Http2}}
}
gRPC 与传统的api是不同的需要我们自己定义proto文件gRPC 使用协定优先方法进行 API 开发。默认情况下协议缓冲区 (protobuf) 用作接口设计语言 (IDL)。*.proto 文件包含gRPC 服务的定义。在客户端与服务器之间发送的消息。有关 protobuf 文件的语法的详细信息可以查看官方文档 (protobuf)。proto文件在实际开发中肯定会有多个存在这里有一个技巧就是将proto文件放在一个文件夹内然后利用Protobuf的Link关联即可这样就只用维护一份proto文件即可。同时微软还帮我们提供了dotnet-grpc.NET Core 全局工具请运行以下命令dotnet tool install -g dotnet-grpc
dotnet-grpc 可以用于将 Protobuf 引用作为 Protobuf / 项添加到 .csproj 文件Protobuf IncludeProtos\greet.proto GrpcServicesServer /
具体用法可以查看文档https://docs.microsoft.com/zh-cn/aspnet/core/grpc/dotnet-grpc在解决访问文件夹根目录添加 Proto 文件夹新建一个hello.protoproto文件将其分别连接到两个项目中。现在来开始编写hello.proto添加一个SayHello方法。syntax proto3;package hello; //定义包名// 定义服务
service HelloService {// 定义一个 SayHello 方法rpc SayHello (HelloRequest) returns (HelloReply);
}message HelloRequest {string name 1;
}message HelloReply {string message 1;
}
然后来实现这个服务在服务端添加一个GreeterService.cs。using Grpc.Core;
using Hello;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;namespace gRPC_ServerDemo.Services
{public class GreeterService : HelloService.HelloServiceBase{private readonly ILogger _logger;public GreeterService(ILoggerFactory loggerFactory){_logger loggerFactory.CreateLoggerGreeterService();}public override TaskHelloReply SayHello(HelloRequest request, ServerCallContext context){_logger.LogInformation($Sending hello to {request.Name});return Task.FromResult(new HelloReply { Message Hello request.Name });}}
}
HelloService.HelloServiceBase是proto文件为我们自动生成的类。调用重载方法SayHello()记录了一条日志然后返回客户端传进来的字段name。在配置文件中将GreeterService服务添加到路由管道中app.UseEndpoints(endpoints
{endpoints.MapGet(/, async context {await context.Response.WriteAsync(Hello World!);});endpoints.MapGrpcServiceGreeterService();
});
支持我们服务端完成启动服务端拿到启动地址https://localhost:5001。现在去客户端配置地址调用我们写的服务在开始之前需要在客户端解决方案先引用下面几个nuget包。Install-Package Grpc.Net.Client
Install-Package Google.Protobuf
Install-Package Grpc.Tools
using Grpc.Net.Client;
using Hello;
using System;
using System.Threading.Tasks;namespace gRPC_ClientDemo
{class Program{static async Task Main(string[] args){using var channel GrpcChannel.ForAddress(https://localhost:5001);var client new HelloService.HelloServiceClient(channel);await UnaryCallExample(client);}private static async Task UnaryCallExample(HelloService.HelloServiceClient client){var reply await client.SayHelloAsync(new HelloRequest { Name 阿星Plus });Console.WriteLine(Greeting: reply.Message);}}
}
启动服务端和客户端看看效果成功发送消息和获取消息。