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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM