基礎說明 本文根據 RFC4226 和 RFC6238 文檔,詳細的介紹 HOTP 和 TOTP 演算法的原理和實現。 兩步驗證已經被廣泛應用於各種互聯網應用當中,用來提供安全性。對於如何使用兩步驗證,大家並不陌生,無非是開啟兩步驗證,然後出現一個二維碼,使用支持兩步驗證的移動應用比如 Google ...
gRPC簡單介紹
gRPC 是一種與語言無關的高性能遠程過程調用 (RPC) 框架(google開源的rpc框架)。gRPC 預設使用 protocol buffers,這是 Google 開源的一套成熟的結構數據序列化機制(也可以使用其他數據格式如 JSON)
gRPC 的主要優點是:
HTTP2傳輸
現代高性能輕量級 RPC 框架。
協定優先 API 開發,預設使用協議緩衝區,允許與語言無關的實現。
可用於多種語言的工具,以生成強類型伺服器和客戶端。
支持客戶端、伺服器和雙向流式處理調用。
使用 Protobuf 二進位序列化減少對網路的使用。
這些優點使 gRPC 適用於:
效率至關重要的輕量級微服務。
需要多種語言用於開發的系統。
需要處理流式處理請求或響應的點對點實時服務。
支持語言
https://grpc.io/docs/languages/
Protobuf Proto3對應各語言類型
Proto3 參考:https://developers.google.com/protocol-buffers/docs/proto3
Proto2 參考:https://developers.google.com/protocol-buffers/docs/proto
除以上類型,還可以自定義類型
可null類型(google擴展包)
需要導入google.protobuf 包
import "google/protobuf/wrappers.proto"
google.protobuf 包內容
創建.Net Core gRpc Server項目
運行環境:Window10 ,Visual Studio 2019, Net Core 3.1
創建成功後,項目自動生成Protos文件與Services
註意幾個點
1. 一個proto文件對應一個Service服務
2. 註入
services.AddGrpc();
當新增一個proto文件和Service服務後,添加以下對應註入
app.UseEndpoints(endpoints => {
endpoints.MapGrpcService<GreeterService>();
});
3. NuGet包引入
Grpc.AspNetCore
Grpc.Tools
Google.Protobuf
4. 指定Protobuf服務端
預設情況下,會為 Protobuf項組中每個 .proto 文件都生成伺服器和客戶端資產。 若要確保伺服器項目中僅生成伺服器資產,請將 GrpcServices 屬性設置為 Server。
多個proto時,可配置Protos\*.proto
5. 自動生成代碼
根據proto文件自動生成.net 代碼,當前項目obj\Debug\netcoreapp3.1目錄下
Proto文件語法說明
我們習慣把通用的單獨定義一個common.proto文件,然後通過import方式導入使用,包名.消息名; 集合類型定義使用repeated,枚舉類型定義 enum
greeter.proto
common.proto
創建.Net Core gRpc Client項目
1. 創建項目
這裡創建一個單元測試項目來做client調用
2. 拷貝Protos
把Service項目的Protos整個目錄拷貝到項目根目錄下
3. NuGet包引入
Grpc.AspNetCore
Grpc.Tools
Google.Protobuf
4. .csproj配置
確保伺服器項目中僅生成客戶端資產,請將 GrpcServices 屬性設置為 Client。
<ItemGroup>
<Protobuf Include="Protos\*.proto" GrpcServices="Client" />
</ItemGroup>
5. 添加UnitTest1.cs 單元測試
gRpc使用Http2傳輸,設置https調用
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
GreeterClient 為proto文件自動生成的客戶端資產
gRPC 調試
傳統方式
啟動Server 與 Client 兩個項目,右鍵解決方案屬性 進行設置
命令模式
運行-> cmd -> F:
切換到Client項目目錄:cd F:\demo\gRPCDemo\TestProjectUnitDemo
執行命令:dotnet test --filter 類名.方法
例如:dotnet test --filter UnitTest1.GetById
結束 OVER
參考學習地址
https://grpc.io/docs/what-is-grpc/introduction/
https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.1
https://docs.microsoft.com/zh-cn/aspnet/core/grpc/protobuf?view=aspnetcore-3.1#scalar-value-types