什麼是rpc?
rpc,全稱Remote Procedure Call,通過它,你可以像調用本地方法一樣調用遠端服務。前端可以調用後端方法,後端也可以調用前端方法。其實這個概念并不陌生,上一篇關于web實時應用的文章也提到了這個概念,并實作了前後端互調的操作。
在正式開始使用grpc之前,我們還需要掌握protocol buffer的概念。
什麼是grpc?
grpc來自大名鼎鼎的谷歌,孵化于CNCF基金會(docker、k8s同樣出自這個基金會)。它是一款高性能、開源、通用的rpc架構,你可以通過它來定義rpc的請求和響應。它基于http/2,全雙工通信、低延遲、高效率、支援流、可輕松的插入身份認證、負載均衡、監控日志等等等等。。。關鍵是它還可以跨語言操作。隻要server端或client端是它支援的語言編寫,都可以跨語言操作。官方支援的開發語言:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iN2cTO3MjMxcTMtYTN2gTM1MzNxkjM2ADMyAjMtIjM1UzN38CX2ADMyAjMvwlMyUTN3czLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
為什麼用protocol buffer?
因為grpc采用合約優先的API開發模式,預設采用protocol buffer作為接口設計語言,我們可以在proto檔案裡定義消息和服務。當然,作為預設選項,它自然是有優勢的,主要是這些:
1、文法簡單,容易上手。
2、可生成所有(官方稱)主流開發語言的代碼。
3、二進制格式,效率高的同時也很适合大資料傳輸。
了解完基礎以後,先上一個小demo參考一下:
syntax = "proto3";
import "aaa.proto";
option csharp_namespace = "gRPCApiDemo.Protos";
package Demo;
service Math{
rpc Add (AddRequest) returns (AddRespones);
}
message AddRequest{
int32 a=1;
int32 b=2;
}
message AddRespones{
int32 a=1;
repeated int32 b=2;
reserved 3,4 to 10;
reserved "phone";
}
解讀一下:
syntax:聲明目前使用的文法
import:引入其他proto
option csharp_namespace:打包以後類的命名空間,優先級高
package:打包以後類的命名空間,優先級低
service:聲明服務
rpc Add (AddRequest) returns (AddRespones):聲明一個rpc調用,接收AddRequest消息,傳回AddRespones消息。
message:聲明消息
int32:資料類型,常用的還有int64、float、string、bool等,有興趣的可以去查一下。
a=1:如果把a看作字段名,那麼1相當于字段名的别名。
repeated:可重複字段。如果給b多個值,那麼b差不多相當于一個int類型的數組,先後順序會被保留。
reserved:保留字段,聲明以後的字段名和别名都不允許再使用了。需要注意字段名和别名不能一起聲明。
編譯proto
proto編譯的主要目的是生成代碼。
首先是工具,點選這裡,選出适合自己系統的插件,如圖:
下載下傳完以後随便找個目錄解壓,然後把其中的bin目錄添加到環境變量裡:
如果在控制台輸入protoc可以看到一堆資訊彈出來,就表示安裝成功了:
在我們使用protoc把proto檔案編譯成c#檔案之前,我們還需要做這些:
1、指定proto項目路徑。
可以用rotoc --IPath(或--proto_path)或者直接打開控制台轉到protoc安裝目錄。
2、指定生成檔案的類型和路徑。
protoc --csharp_out=cs grpcApi.proto //如果有多個proto檔案想批量生成可以使用 *.proto
上面的cs是我建立的檔案夾名(這個檔案夾是建立在proto項目目錄下的),grpcApi.proto是自建的proto檔案,執行結果見圖:
成功以後會在指定的目錄下生成cs檔案,見圖:
生成的檔案和proto檔案命名一樣,隻不過首字母會自動大寫,打開看看:
好吧能看懂的有限,是以看看就行了。
不過有一點千萬注意:這個cs檔案不要手動改,不要手動改,不要手動改!
關于應用
能使用編譯器生成代碼就可以用了麼?其實還差很多。距離正式應用還差服務端和用戶端的編寫部署。
有空的話補下一篇,會有具體實作的流程和代碼。
聲明:未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則視為侵權。
本文原創發表于部落格園,作者為暮城傾心。歡迎轉載。Donation(掃碼支援作者)↓
-
.Net Core微服務——GRPC通信(上) - 微信
-
.Net Core微服務——GRPC通信(上) - 支付寶