.net高級面試進階篇(一):GRPC


前言:.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的服務端就好了  可以直接運行如下

  

 

  接下來在其他客戶端系統就可以像調用普通方法一樣調用這個服務

  

  


免責聲明!

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



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