c# 使用grpc代替WCF

gRPC服务器

gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,带来诸如双向流、流控、头部压缩、单 TCP 链接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。从定义上能够看到这个主要是给移动应用作通讯用的,其次他支持双向的通讯,所以能够说GRPC是一个RPC框架没错,可是它的功能已经强于RPC,由于普通RPC是定义是一应一答的单向通讯模式,而GRPC支持双向通讯,毕竟作不到双向通讯怎么能说是给移动应用设计的呢?网络

gRPC主要有4种请求/响应模式,分别是:框架

(1) 简单模式(Simple RPC)ide

客户端发起一次请求,服务端响应一个数据,即标准RPC通讯。性能

(2) 服务端数据流模式(Server-side streaming RPC)spa

这种模式是客户端发起一次请求,服务端返回一段连续的数据流。典型的例子是客户端向服务端发送一个股票代码,服务端就把该股票的实时数据源源不断的返回给客户端。设计

(3) 客户端数据流模式(Client-side streaming RPC)日志

与服务端数据流模式相反,此次是客户端源源不断的向服务端发送数据流,而在发送结束后,由服务端返回一个响应。典型的例子是物联网终端向服务器报送数据。orm

(4) 双向数据流模式(Bidirectional streaming RPC)blog

这是客户端和服务端均可以向对方发送数据流,这个时候双方的数据能够同时互相发送,也就是能够实现实时交互。好比聊天应用。

grpc-dotnet

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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

.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核心库里面现有的网络原始类型,请看比较图:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

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

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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

相关文章
相关标签/搜索