asp.net core 3.0 gRPC框架小試
什麼是gRPC
gRPC是google開源的一個高效能、跨語言的RPC框架,基於HTTP2協議,採用ProtoBuf 定義的IDL。
gRPC 的主要優點是:
現代高效能輕量級 RPC 框架。
協定優先 API 開發,預設使用協議緩衝區,允許與語言無關的實現。
可用於多種語言的工具,以生成強型別伺服器和客戶端。
支援客戶端、伺服器和雙向流式處理呼叫。
使用 Protobuf 二進位制序列化減少對網路的使用。
這些優點使 gRPC 適用於:
效率至關重要的輕量級微服務。
需要多種語言用於開發的 Polyglot 系統。
需要處理流式處理請求或響應的點對點實時服務。
更多介紹請前往 https://grpc.io/docs/guides/
開始
netcore3.0中已經加入了gRPC的模板專案.
1,開啟vs2019,建立一個asp.net core web專案
2,選擇ASP.NET Core 3.0就會出現gRPC模板,點選建立。
如果沒安裝core3的SDK請前往https://dotnet.microsoft.com/download/dotnet-core/3.0下載最新版本安裝,
如果你已經安裝了core 3.0的SDK卻還是無法顯示其選項,工具 > 選項 ,勾選“使用 .NET Core SDK 預覽版”
3,模板只有一個服務端專案,需要自行建立一個客戶端來做演示,建立一個.netcore的控制檯程式即可。
客戶端需要安裝以下三個包
Grpc.Core,包含C-core客戶端的C#API。
Google.Protobuf,包含C#的protobuf訊息API。
Grpc.Tools,包含對protobuf檔案的C#工具支援。
服務端程式碼
greet.proto,proto相關語法只是,前往 https://developers.google.com/protocol-buffers/docs/proto3,可能需要梯子。
syntax = "proto3";
package Greet;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
enum Language{
en_us = 0; //列舉必須以0開始
zh_cn = 1;
}
Language languageEnum = 2;
}
// The response message containing the greetings.
message HelloReply {
string message = 1;
int32 num = 2;
int32 adsa = 3;
}
GreeterService
public class GreeterService : Greeter.GreeterBase
{
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
var greeting = string.Empty;
switch (request.LanguageEnum)
{
case HelloRequest.Types.Language.EnUs:
greeting = "Hello";
break;
case HelloRequest.Types.Language.ZhCn:
greeting = "你好";
break;
}
return Task.FromResult(new HelloReply
{
Message = $"{greeting} {request.Name}",
Num = new Random().Next()
});
}
}
客戶端程式碼
新增greet.proto檔案,將Protos\greet.proto檔案從服務端複製到客戶端專案。將greet.proto檔案路徑新增到專案檔案GrpcDemo.Client.csproj的<ItemGroup>節點內。
這裡我們不復制,直接定位到相關路徑即可。
GrpcDemo.Client.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.7.0" />
<PackageReference Include="Grpc.Core" Version="1.20.1" />
<PackageReference Include="Grpc.Tools" Version="1.20.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<!-- Include支援*匹配 -->
<!-- GrpcServices="Client"新增該屬性構建相關客戶端類檔案(後設資料) -->
<Protobuf Include="..\GrpcDemo.Server\Protos\*.proto" GrpcServices="Client" />
</ItemGroup>
</Project>
Program.cs
static async Task Main(string[] args)
{
var serverAddress = "localhost:50051";
//建立連線通道,埠80
var channel = new Channel(serverAddress, ChannelCredentials.Insecure);
var client = new Greeter.GreeterClient(channel);
//請求
var reply1 = await client.SayHelloAsync(
new HelloRequest { Name = "wu", LanguageEnum = HelloRequest.Types.Language.EnUs });
Console.WriteLine($"{reply1.Message} Num:{reply1.Num}");
var reply2 = await client.SayHelloAsync(
new HelloRequest { Name = "wu", LanguageEnum = HelloRequest.Types.Language.ZhCn });
Console.WriteLine($"{reply2.Message} Num:{reply2.Num}");
//使用完後應釋放資源
await channel.ShutdownAsync();
Console.WriteLine("已斷開連線");
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
執行
Demo地址 https://github.com/wwwu/GrpcDemo
參考文件
https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.0
https://developers.google.com/protocol-buffers/docs/proto3
https://grpc.io/docs/guides/
原文地址:https://www.cnblogs.com/wu_u/p/10783168.html
.NET社群新聞,深度好文,歡迎訪問公眾號文章彙總 http://www.csharpkit.com
相關文章
- gRPC in ASP.NET Core 3.0 -- Protocol Buffer(1)RPCASP.NETProtocol
- asp.net core 3.0中Grpc.AspNetCore.Server帶來了什麼ASP.NETRPCNetCoreServer
- 使用grpcui測試ASP.NET core gRPC服務RPCUIASP.NET
- Asp.Net Core Grpc 入門實踐ASP.NETRPC
- ASP.Net Core 3.1 使用gRPC入門指南ASP.NETRPC
- gRPC在 ASP.NET Core 中應用學習RPCASP.NET
- ASP.NET Core 2.2 遷移至 3.0 備忘錄ASP.NET
- dotnet core 3.0 linux 部署小貼士Linux
- .Net Core 3.0 MVC 中使用 SqlSugar ORM框架MVCSqlSugarORM框架
- GRPC與HTTP/3.0RPCHTTP
- ASP.NET Core 框架本質學習ASP.NET框架
- 淺析Asp.Net Core框架IConfiguration配置ASP.NET框架
- ASP.NET Core 中建立 gRPC 客戶端和伺服器ASP.NETRPC客戶端伺服器
- 10分鐘 Castle.Windsor 適配 Asp.Net Core 3.0ASTASP.NET
- 測試 ASP.NET Core API ControllerASP.NETAPIController
- 在 ASP.NET Core 中建立 gRPC 客戶端和伺服器ASP.NETRPC客戶端伺服器
- ASP.NET Core 入門教程 2、使用ASP.NET Core MVC框架構建Web應用ASP.NETMVC框架架構Web
- 從ASP.NET Core 3.0 preview 特性,瞭解CLR的Garbage CollectionASP.NETView
- GRPC與.net coreRPC
- ASP.NET Core Web API 整合測試ASP.NETWebAPI
- .net core grpc單元測試 - 伺服器端RPC伺服器
- .Net Core中使用GrpcRPC
- ASP.NET Core 實戰:使用 ASP.NET Core Web API 和 Vue.js,搭建前後端分離框架ASP.NETWebAPIVue.js後端框架
- ASP.NET 6.0 Core 遷移 ASP.NET Core 7.0ASP.NET
- ASP.NET Core ----ASP.NET Core中使用Code FirstASP.NET
- asp.net core 使用 TestServer 來做整合測試ASP.NETServer
- .net core微服務——gRPC(下)微服務RPC
- TechEmpower Web 框架效能第19輪測試結果正式釋出,ASP.NET Core在主流框架中拔得頭籌Web框架ASP.NET
- 在ASP.NET Core中用HttpClient(六)——ASP.NET Core中使用HttpClientFactoryASP.NETHTTPclient
- .Net Core(.Net6)建立grpcRPC
- 前端從? 到? gRPC 框架前端RPC框架
- 推薦一個 ASP.NET Core 的輕量級外掛框架ASP.NET框架
- ASP.NET Core Web API 整合測試中使用 Bearer TokenASP.NETWebAPI
- Asp.Net Core SwaggerUI 接入ASP.NETSwaggerUI
- asp.net core 整合JWTASP.NETJWT
- asp.net core 整合 PrometheusASP.NETPrometheus
- ASP.NET Core - 開篇ASP.NET
- dubbogo 3.0:牽手 gRPC 走向雲原生時代GoRPC