WCF(07):C#使用grpc代替WCF

gRPC

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

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

(1) 简单模式(Simple RPC)

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

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

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

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

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

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

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

grpc-dotnet

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

image

.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 Core(ORM)、Serilog(日志库)和Identity Server等,均可以与gRPC无缝协作。

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

image

posted on 2020-06-14 23:35  springsnow  阅读(2813)  评论(0编辑  收藏  举报

导航