日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core 下使用 gRPC

發布時間:2023/12/4 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core 下使用 gRPC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

gRPC 是一種與語言無關的高性能遠程過程調用 (RPC) 框架。

  • https://grpc.io/docs/guides/

  • https://github.com/grpc/grpc-dotnet

  • https://docs.microsoft.com/zh-cn/aspnet/core/grpc

gRPC 的主要優點

  • 現代高性能輕量級 RPC 框架。

  • 協定優先 API 開發,默認使用協議緩沖區,允許與語言無關的實現。

  • 可用于多種語言的工具,以生成強類型服務器和客戶端。

  • 支持客戶端、服務器和雙向流式處理調用。

  • 使用 Protobuf 二進制序列化減少對網絡的使用。

這些優點使 gRPC 適用于

  • 效率至關重要的輕量級微服務。

  • 需要多種語言用于開發的 Polyglot 系統。

  • 需要處理流式處理請求或響應的點對點實時服務。

gRPC 現在可以非常簡單的在 .NET Core 和 ASP.NET Core 中使用,并且已經開源,它目前由微軟官方 ASP.NET 項目的人員進行維護,良好的接入 .NET Core 生態。

接下來演示如何使用 gRPC,要想使用 gRPC 需要 .NET Core 3.1或者以上的SDK支持。gRPC分服務端和客戶端,所以新建兩個項目,一個控制臺當作客戶端gRPC_ClientDemo,一個ASP.NET Core 項目當作服務端gRPC_ServerDemo。

先將服務端搞定,添加Grpc.AspNetCore組件

Install-Package Grpc.AspNetCore

然后Startup.cs中添加services.AddGrpc()。

public?void?ConfigureServices(IServiceCollection?services) {services.AddGrpc(); }

因為 gRPC 是基于 HTTP/2 來通信的,所以需要在配置文件中添加Kestrel 啟用 HTTP/2 的配置。

{"Kestrel":?{"EndpointDefaults":?{"Protocols":?"Http2"}} }

gRPC 與傳統的api是不同的,需要我們自己定義proto文件,gRPC 使用協定優先方法進行 API 開發。默認情況下,協議緩沖區 (protobuf) 用作接口設計語言 (IDL)。*.proto 文件包含:

  • gRPC 服務的定義。

  • 在客戶端與服務器之間發送的消息。

有關 protobuf 文件的語法的詳細信息,可以查看官方文檔 (protobuf)。

proto文件在實際開發中肯定會有多個存在,這里有一個技巧就是將proto文件放在一個文件夾內,然后利用Protobuf的Link關聯即可,這樣就只用維護一份proto文件即可。

同時微軟還幫我們提供了dotnet-grpc,.NET Core 全局工具,請運行以下命令:

dotnet?tool?install?-g?dotnet-grpc

dotnet-grpc 可以用于將 Protobuf 引用作為 <Protobuf /> 項添加到 .csproj 文件:

<Protobuf?Include="Protos\greet.proto"?GrpcServices="Server"?/>

具體用法可以查看文檔:https://docs.microsoft.com/zh-cn/aspnet/core/grpc/dotnet-grpc

在解決訪問文件夾根目錄添加 Proto 文件夾,新建一個hello.protoproto文件,將其分別連接到兩個項目中。

現在來開始編寫hello.proto,添加一個SayHello方法。

syntax?=?"proto3";package?hello;?//定義包名//?定義服務 service?HelloService?{//?定義一個?SayHello?方法rpc?SayHello?(HelloRequest)?returns?(HelloReply); }message?HelloRequest?{string?name?=?1; }message?HelloReply?{string?message?=?1; }

然后來實現這個服務,在服務端添加一個GreeterService.cs。

using?Grpc.Core; using?Hello; using?Microsoft.Extensions.Logging; using?System.Threading.Tasks;namespace?gRPC_ServerDemo.Services {public?class?GreeterService?:?HelloService.HelloServiceBase{private?readonly?ILogger?_logger;public?GreeterService(ILoggerFactory?loggerFactory){_logger?=?loggerFactory.CreateLogger<GreeterService>();}public?override?Task<HelloReply>?SayHello(HelloRequest?request,?ServerCallContext?context){_logger.LogInformation($"Sending?hello?to?{request.Name}");return?Task.FromResult(new?HelloReply?{?Message?=?"Hello?"?+?request.Name?});}} }

HelloService.HelloServiceBase是proto文件為我們自動生成的類。

調用重載方法SayHello(),記錄了一條日志然后返回客戶端傳進來的字段name。

在配置文件中將GreeterService服務添加到路由管道中

app.UseEndpoints(endpoints?=> {endpoints.MapGet("/",?async?context?=>{await?context.Response.WriteAsync("Hello?World!");});endpoints.MapGrpcService<GreeterService>(); });

支持我們服務端完成,啟動服務端拿到啟動地址,https://localhost:5001。

現在去客戶端配置地址調用我們寫的服務,在開始之前需要在客戶端解決方案先引用下面幾個nuget包。

Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools using?Grpc.Net.Client; using?Hello; using?System; using?System.Threading.Tasks;namespace?gRPC_ClientDemo {class?Program{static?async?Task?Main(string[]?args){using?var?channel?=?GrpcChannel.ForAddress("https://localhost:5001");var?client?=?new?HelloService.HelloServiceClient(channel);await?UnaryCallExample(client);}private?static?async?Task?UnaryCallExample(HelloService.HelloServiceClient?client){var?reply?=?await?client.SayHelloAsync(new?HelloRequest?{?Name?=?"阿星Plus"?});Console.WriteLine("Greeting:?"?+?reply.Message);}} }

啟動服務端和客戶端看看效果,成功發送消息和獲取消息。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的.NET Core 下使用 gRPC的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。