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=

相關文章
相關標籤/搜索