vlambda博客
学习文章列表

【半译】两个gRPC的C#库:grpc-dotnet vs Grpc.Core

grpc-dotnet 是在2019年随着 .NET Core 3.0 一起发布的一个gPRC官方库。在ASP.NET Core gRPC项目模板里面就使用了这个库。

 

.NET Core 3.0之前难道不可以使用gRPC吗?

目前,gRPC 在.NET上有两种官方实现:

  • Grpc.Core:这个是原来的gRPC C#库,它基于原生gPRC(C-Core)核心库实现。

  • grpc-dotnet:这是新的库,完全使用C#编写实现,没有原生依赖,基于.NET Core 3.0。 

grpc-dotnet并没有替代Grpc.Core,它们并行共存,它们在功能、集成力、支持的平台、成熟度和性能方面各有优势。而且这两种实现使用了相同的API来调用和处理RPC,从而可以避免单库锁定,并允许用户选择满足其需求的最佳实现。

 

grpc-dotnet

与原来基于C-Core实现的Grpc.Core不同,grpc-dotnet使用了.NET Core BCL核心库里面现有的网络原始类型,请看比较图:

在服务器端Grpc.ASPNETCore.Server库集成到了ASP.NET Core中,使开发人员能够从ASP.NET Core现有的日志、配置、依赖注入、身份验证、授权等常见横切关注点的生态系统中获益。ASP.NET生态系统中的流行库,如Entity Framework CoreORM)、Serilog(日志库)和Identity Server等,均可以与gRPC无缝协作。

 

在客户端Grpc.Net.Client库基于大家熟悉的HttpClient API构建,该API.Net Core的一部分。与服务器端一样,gRPC客户端可以从构建在HttpClient上的软件生态系统中受益,例如Polly(弹性和故障处理库)和HttpClientFactory(管理HTTPClient生命周期)等库就可以在gRPC客户端上使用。

 

grpc-dotnet Grpc.Core关系图: