前言:.net高級面試進階篇適用於面試前臨時補充進階知識量的小伙伴,特別是你沒那么多時間去一個個詳細的系統學習,只想用最快的時間去了解一門技術以應付面試官情況。
一. GRPC 是什么 ?
客戶端一般通過接口的形式調用服務端的資源或業務邏輯,我們最常用的是Restful Api,webapi就是Rest的一種,客戶端通過http協議用uri地址訪問服務接口,他們之間用json或者xml的形式傳輸數據。
而除了Rest以外,還有RPC遠程過程調用的方式可以實現接口調用,相較於Rest,Rpc性能遠超,更嚴格,更安全,而grpc是微軟開發的一種rpc,其他還有Thrift、Dubbo等,你可以理解成前端框架有vue react angular,而你只需要選一種大家最通用的vue就夠用了,grpc就是一樣的道理,畢竟是微軟爸爸在netcore中指定用的。
總結:Grpc(遠程過程調用),相對於Restapi的另一種接口服務框架。
二. GRPC的優缺點 ?
優點:高性能,輕量級
一方面RPC是基於Tcp協議架設在傳輸層,而Rest是基於Http協議架設在應用層。
另一方面RPC采用二進制傳輸協議ProtocolBuffer壓縮傳輸數據。
需要注意的是GRPC有個特殊點,他是RPC中的一個特例,它采用的是Http/2的協議,雖然性能方面沒有傳統RPC的頂格配置,但這種差距幾乎可以忽略。
而Http/2的特點使它具備了更高的通用性和可塑性。
缺點:可讀性差,Http/2支持不好
雖然Rest的性能不好,但Json的可讀性很好,人眼直接能讀懂,而GRPC的Protobuf二進制可讀性差
另外目前大多數Http方式的服務都無法支持RRPC的Http/2協議,所以目前GRPC基本受限於內部系統之間或點對點的通訊服務,尤其適合各種微服務架構。
如果你的公司各種內部系統交互龐雜,業務邏輯繁多,那么高性能的GRPC將是你的首選。
三. 如何在 .NetCore 3.0中搭建RPC
網上有很多教程,這里就不一一講解,我就貼出一些關鍵步驟的直觀圖片,讓你有一個直觀的印象知道GRPC到底是怎么搭建的。
微軟官方文檔:https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.0
前提:VS2019 .Net Core3.1SDK
1. 新建一個空的asp.net core Web應用程序
2. 引入Grpc的Nuget包
3. 關鍵步驟,新建proto文件編寫IDL接口代碼
Protocol Buffer 協議緩沖區,是一種接口標准語言,詳見官方文檔 https://docs.microsoft.com/zh-cn/aspnet/core/grpc/protobuf?view=aspnetcore-3.0
//協議版本3.0 syntax = "proto3"; //設置命名空間 默認是項目名.文件夾名 為了后面方便引用 這里我去掉了后面的.文件夾名 option csharp_namespace = "RpcDemo"; //以下部分就是需要自己寫的proto代碼 //關鍵代碼 定義服務類Students service Students { //rpc關鍵字就是定義接口方法名 后面是參數對象類StudentInput 以及返回對象 都是自定義的類 見下文 rpc GetStudent (StudentInput) returns (StudentOutput); } //自定義類StudentInput 關鍵字message就是定義類對象 也就是C#中的class message StudentInput{ //類的字段 int32就是C#中的int 這里注意后面的1並非是值 而是參數的序號 你只要按照順序1 2 3 4...這樣定義飢渴 int32 searchId=1; string searchName=2; } //自定義類StudentOutput message StudentOutput{ int32 studentId=1; string studentName=2; }
接着你的服務的具體實現類
到這里GRPC的服務端就好了 可以直接運行如下
接下來在其他客戶端系統就可以像調用普通方法一樣調用這個服務