gRPC是一個高性能、通用的開源遠程過程調用(RPC)框架,基於底層HTTP/2協議標準
和協議層Protobuf序列化協議
開發,支持衆多的開發語言,由Google開源。
gRPC也是基於以下理念:定義一個服務,指定其能夠被遠程調用的方法(包含參數和返回類型)。在服務端實現這個接口,並運行一個 gRPC服務器來處理客戶端調用。在客戶端擁有一個存根能夠像服務端一樣的方法。
gRPC 客戶端和服務端可以在多種環境中運行和交互。你可以用Java創建一個 gRPC 服務端,用 Go、Python、C# 來創建客戶端。
特點:
- 跨語言;
- 基於HTTP/2之上的二進制協議;
- Protobuf序列化機制,比JSON體積小,網絡傳輸快;
- 一個連接上可以多路複用,併發處理多個請求和響應;
- 多種語言的類庫實現;
- 服務定義文件和自動代碼生成(.proto 文件和 Protobuf 編譯工具);
- 適合高性能輕量的微服務,一般對外的接口用Restful API,內部服務的調用用gRPC。gRPC是一個分佈式服務框架,和以前的WebService,WCF類似;
- gRPC還提供了很多擴展點,用於對框架進行功能定製和擴展,例如,通過開放負載均衡接口可以無縫的與第三方組件進行集成對接(Zookeeper、域名解析服務、SLB 服務等)。
gRPC 使用 HTTP/2 作爲傳輸協議。 雖然與 HTTP 1.1 也能兼容,但 HTTP/2 具有許多高級功能:
用於數據傳輸的二進制組幀協議 - 與 HTTP 1.1 不同,HTTP 1.1 是基於文本的。
對通過同一連接發送多個並行請求的多路複用支持 - HTTP 1.1 將處理限制爲一次處理一個請求/響應消息。
雙向全雙工通信,用於同時發送客戶端請求和服務器響應。
內置流式處理,支持對大型數據集進行異步流式處理的請求和響應。
減少網絡使用率的標頭壓縮。
gRPC 是輕量型且高性能的。 其處理速度可以比 JSON 序列化快 8 倍,消息小 60% 到 80%。 在 Microsoft Windows Communication Foundation (WCF) 中,gRPC 的性能超過經過高度優化的 NetTCP 綁定的速度和效率。 與偏向於 Microsoft 堆棧的 NetTCP 不同,gRPC 是跨平臺的。
接下來,我們通過一個Demo,來學習一下,如何在Visual Studio 2022中實現gRPC功能。
2、創建gRPC服務端
2.1、創建gRPC服務端項目
1. 打開Visual Studio 2022,在開始界面中選擇“創建新項目”。如下圖。
2.或者在菜單上點擊文件—>新建—>項目—>彈出“創建新項目”的界面。如下圖。
3. Visual Studio 2022彈出的“創建新項目”的對話框中做如下選擇。如下圖。
- 在最左邊的下拉框中,選擇 “C# ,如下圖中1處
- 在中間的下拉框中,選擇 “所有平臺”,如下圖2處。
- 在最右邊的下拉框中,選擇“Web”,如下圖3處。
- 在下圖中4處,選擇“ASP.NET Core gRPC服務”gRPC項目模板,點擊“下一步”按鈕。
4.在彈出的“配置新項目”的對話框中,如下圖,在“項目名稱”輸入框中,輸入“Demo.GrpcService”。然後使用鼠標點擊“下一步”按鈕。
5. 在彈出的“其他信息”的對話框,如下圖。在“框架”下拉框中,選擇“NET 7.0(標準期限支持)”。其他值選擇默認值即可。然後使用鼠標點擊“創建”按鈕。
6.默認項目文件結構,如下圖所示:
2.2、項目文件說明
- appsettings.json
我們打開appsettings.json文件,其中有一個Protocols
屬性,代表基於Http2進行通信。
- Protos
在創建的項目中,我們會看到有一個名稱爲Protos
的文件夾,該文件夾用於存放proto協議文件,其中的greet.proto是項目默認給我們創建的一個示例文件,它會根據協議自動生成需要的類文件。該協議文件中的具體說明如下圖所示:
- Services
在創建的項目中,我們會看到有一個名稱Services
的文件夾,該文件夾用於存放具體的業務實現類(即:服務類),其中的GreeterService.cs是項目默認給我們創建的一個示例文件,具體說明如下圖所示:
上述圖中的Greeter.GreeterBase來自greet.proto文件生成的類文件,具體位置如下圖所示:
- 註冊服務
在Visual Studio 2022的“解決方案資源管理器”中找到Program.cs文件,使用鼠標雙擊打開Program.cs
文件,在這個文件中需要添加gRPC服務,同時需要將所有的業務服務進行註冊,如下圖所示: