欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET Core 3.0使用gRPC的具體方法

 更新時間:2019年12月23日 14:41:33   作者:曉晨Master  
這篇文章主要介紹了ASP.NET Core 3.0使用gRPC,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一.簡介

gRPC 是一個由Google開源的,跨語言的,高性能的遠(yuǎn)程過程調(diào)用(RPC)框架。 gRPC使客戶端和服務(wù)端應(yīng)用程序可以透明地進(jìn)行通信,并簡化了連接系統(tǒng)的構(gòu)建。它使用HTTP/2作為通信協(xié)議,使用 Protocol Buffers 作為序列化協(xié)議。

它的主要優(yōu)點:

  • 現(xiàn)代高性能輕量級 RPC 框架。
  • 約定優(yōu)先的 API 開發(fā),默認(rèn)使用 Protocol Buffers 作為描述語言,允許與語言無關(guān)的實現(xiàn)。
  • 可用于多種語言的工具,以生成強類型的服務(wù)器和客戶端。
  • 支持客戶端,服務(wù)器雙向流調(diào)用。
  • 通過Protocol Buffers二進(jìn)制序列化減少網(wǎng)絡(luò)使用。
  • 使用 HTTP/2 進(jìn)行傳輸

這些優(yōu)點使gRPC非常適合:

  • 高性能輕量級微服務(wù) - gRPC設(shè)計為低延遲和高吞吐量通信,非常適合需要高性能的輕量級微服務(wù)。
  • 多語言混合開發(fā) - gRPC工具支持所有流行的開發(fā)語言,使gRPC成為多語言開發(fā)環(huán)境的理想選擇。
  • 點對點實時通信 - gRPC對雙向流調(diào)用提供出色的支持。gRPC服務(wù)可以實時推送消息而無需輪詢。
  • 網(wǎng)絡(luò)受限環(huán)境 - 使用 Protocol Buffers二進(jìn)制序列化消息,該序列化始終小于等效的JSON消息,對網(wǎng)絡(luò)帶寬需求比JSON小

不建議使用gRPC的場景:

  • 瀏覽器可訪問的API - 瀏覽器不完全支持gRPC。雖然gRPC-Web可以提供瀏覽器支持,但是它有局限性,引入了服務(wù)器代理
  • 廣播實時通信 - gRPC支持通過流進(jìn)行實時通信,但不存在向已注冊連接廣播消息的概念
  • 進(jìn)程間通信 - 進(jìn)程必須承載HTTP/2才能接受傳入的gRPC調(diào)用,對于Windows,進(jìn)程間通信管道是一種更快速的方法。

摘自微軟官方文檔

支持的語言如下:

二.gRPC on .NET Core

gRPC 現(xiàn)在可以非常簡單的在 .NET Core 和 ASP.NET Core 中使用,在 .NET Core 上的實現(xiàn)的開源地址:https://github.com/grpc/grpc-dotnet ,它目前由微軟官方 ASP.NET 項目的人員進(jìn)行維護(hù),良好的接入 .NET Core 生態(tài)。

.NET Core 的 gRPC 功能如下:

  • Grpc.AspNetCore 一個用于在ASP.NET Core承載gRPC服務(wù)的框架,將 gRPC和ASP.NET Core 功能集成在一起,如:日志、依賴注入、身份認(rèn)證和授權(quán)。
  • Grpc.Net.Client 基于HttpClient (HttpClient現(xiàn)已支持HTTP/2)的 gRPC客戶端
  • Grpc.Net.ClientFactory 與gRPC客戶端集成的HttpClientFactory,允許對gRPC客戶端進(jìn)行集中配置,并使用DI注入到應(yīng)用程序中

三.使用 ASP.NET Core 創(chuàng)建 gRPC 服務(wù)

通過 Visual Studio 2019 (16.3.0)提供的模板,可以快速創(chuàng)建 gRPC 服務(wù)。

來扒拉一下默認(rèn)源碼包含了什么東東。

① 配置文件 appsettings.json ,多了Kestrel 啟用 HTTP/2 的配置,因為 gRPC 是基于 HTTP/2 來通信的

② PB協(xié)議文件 greet.proto 用于自動生成服務(wù)、客戶端和消息(表示傳遞的數(shù)據(jù))的C# Class

③ 服務(wù)類 GreeterService ,服務(wù)類集成的 Greeter.GreeterBase 來自于根據(jù)proto文件自動生成的,生成的類在 obj\Debug\netcoreapp3.0目錄下

自動生成的類:

Startup.cs類,將 gRPC服務(wù)添加到了終結(jié)點路由中

⑤ csproj 項目文件,包含了 proto 文件引用

2.運行

第一次運行會提示是否信任證書,點擊“是”

這是因為HTTP/2需要HTTPS,盡管HTTP/2協(xié)議沒有明確規(guī)定需要HTTPS,但是為了安全在瀏覽器實現(xiàn)上都要求了HTTPS,所以現(xiàn)在的HTTP/2和HTTPS基本都是一對。

四. 創(chuàng)建 gRPC 客戶端

1.添加一個.NET Core 控制臺應(yīng)用程序

2.通過nuget添加包:Grpc.Net.Client、Google.Protobuf、Grpc.Tools

3.將服務(wù)的 proto 文件復(fù)制到客戶端

4.編輯客戶端項目文件,添加關(guān)于proto文件的描述

<ItemGroup>
 <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
</ItemGroup>

注意 GrpcServices="Client" 這里是Client和服務(wù)是不一樣的

5.生成客戶端項目可以通過proto文件生成類

6.添加客戶端調(diào)用代碼

static async Task Main(string[] args)
{
 var channel = GrpcChannel.ForAddress("https://localhost:5001");
 var client = new Greeter.GreeterClient(channel);
 var reply = await client.SayHelloAsync(
  new HelloRequest { Name = "曉晨" });
 Console.WriteLine("Greeter 服務(wù)返回數(shù)據(jù): " + reply.Message);
 Console.ReadKey();
}

7.先啟動服務(wù),然后運行客戶端

這里可以看到,客戶端成功調(diào)用了服務(wù),收到了返回的消息。

五.自己動手寫一個服務(wù)

前面我們使用的 Greeter 服務(wù)是由模板自動給我們創(chuàng)建的,現(xiàn)在我們來自己動手寫一個服務(wù)。

1.定義 proto 文件 LuCat.proto,并在csproj項目文件中添加描述

syntax = "proto3";

option csharp_namespace = "AspNetCoregRpcService";

import "google/protobuf/empty.proto";
package LuCat; //定義包名

//定義服務(wù)
service LuCat{
 //定義吸貓方法
 rpc SuckingCat(google.protobuf.Empty) returns(SuckingCatResult);
}

message SuckingCatResult{
 string message=1;
}

2.實現(xiàn)服務(wù) LuCatService.cs

public class LuCatService:LuCat.LuCatBase
{
 private static readonly List<string> Cats=new List<string>(){"英短銀漸層","英短金漸層","美短","藍(lán)貓","貍花貓","橘貓"};
 private static readonly Random Rand=new Random(DateTime.Now.Millisecond);
 public override Task<SuckingCatResult> SuckingCat(Empty request, ServerCallContext context)
 {
  return Task.FromResult(new SuckingCatResult()
  {
   Message = $"您吸了一只{Cats[Rand.Next(0, Cats.Count)]}"
  });
 }
}

3.在 Startup終結(jié)點路由中注冊

endpoints.MapGrpcService<LuCatService>();

4.添加客戶端調(diào)用

var catClient = new LuCat.LuCatClient(channel);
var catReply = await catClient.SuckingCatAsync(new Empty());
Console.WriteLine("調(diào)用擼貓服務(wù):"+ catReply.Message);

5.運行測試

六.實際使用中的技巧

技巧1

上面章節(jié)的操作步驟中,我們需要在服務(wù)和客戶端之間復(fù)制proto,這是一個可以省略掉的步驟。

1.復(fù)制 Protos 文件夾到解決方案根目錄(sln文件所在目錄)

2.刪除客戶端和服務(wù)項目中的 Protos 文件夾

3.在客戶端項目文件csproj中添加關(guān)于proto文件的描述

 <ItemGroup>
 <Protobuf Include="..\..\Protos\greet.proto" GrpcServices="Client" Link="Protos\greet.proto" />
 </ItemGroup>

4.在服務(wù)項目文件csproj中添加關(guān)于proto文件的描述

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

在實際項目中,請自己計算相對路徑

5.這樣兩個項目都是使用的一個proto文件,只用維護(hù)這一個文件即可

技巧2

我們在實際項目中使用,肯定有多個 proto 文件,難道我們每添加一個 proto 文件都要去更新 csproj文件?

我們可以使用MSBuild變量來幫我們完成,我們將 csproj 項目文件中引入proto文件信息進(jìn)行修改。

服務(wù)端:

 <ItemGroup>
 <Protobuf Include="..\..\Protos\*.proto" GrpcServices="Server" Link="Protos\%(RecursiveDir)%(Filename)%(Extension)" />
 </ItemGroup>

客戶端:

 <ItemGroup>
 <Protobuf Include="..\..\Protos\*.proto" GrpcServices="Client" Link="Protos\%(RecursiveDir)%(Filename)%(Extension)" />
 </ItemGroup>

示例:

七.總結(jié)

gRPC 現(xiàn)目前是一款非常成熟的高性能RPC框架,當(dāng)前的生態(tài)是非常好的,很多公司的產(chǎn)品或者開源項目都有在使用gRPC,有了它,相信可以讓我們更容易的構(gòu)建.NET Core 微服務(wù),可以讓 .NET Core 更好的接入 gRPC 生態(tài)。不得不說這是 .NET Core 3.0 帶來的最令人振奮的特性之一。

參考資料:

proto3 說明文檔

在ASP.NET Core中創(chuàng)建gRPC客戶端和服務(wù)

Demo 地址

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 圖析ASP.NET Core引入gRPC服務(wù)模板

    圖析ASP.NET Core引入gRPC服務(wù)模板

    這篇文章主要介紹了圖析ASP.NET Core引入gRPC服務(wù)模板的過程,目的就是使記錄盡可能的詳細(xì),盡可能用通俗易懂的語言來進(jìn)行描述,讓大家能用起來。在asp.net core3.0中把grpc服務(wù)作為第一等公民進(jìn)行支持,所以有需要的朋友可以了解下
    2019-04-04
  • .NET 與樹莓派WS28XX 燈帶的顏色漸變動畫效果的實現(xiàn)

    .NET 與樹莓派WS28XX 燈帶的顏色漸變動畫效果的實現(xiàn)

    所謂顏色漸變動畫,首先,你要確定兩種顏色——起始色和最終色,比如從綠色變成紅色,綠色是起始,紅色是終點。這篇文章主要介紹了.NET 與樹莓派WS28XX 燈帶的顏色漸變動畫,需要的朋友可以參考下
    2021-12-12
  • .NET必知的EventCounters性能指標(biāo)監(jiān)視器詳解

    .NET必知的EventCounters性能指標(biāo)監(jiān)視器詳解

    這篇文章主要介紹了.NET必知的EventCounters性能指標(biāo)監(jiān)視器,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • asp.net自定義控件中注冊Javascript問題解決方案

    asp.net自定義控件中注冊Javascript問題解決方案

    這篇文章主要介紹了asp.net自定義控件中注冊Javascript的問題,需要的朋友可以參考下
    2014-05-05
  • LiteralControl ASP.NET中的另類控件

    LiteralControl ASP.NET中的另類控件

    對于LiteralControl控件的應(yīng)用比較少,今天突然看到了,就弄個明白為好,所以總結(jié)出來,供大家一起學(xué)習(xí)
    2012-01-01
  • 寫簡單的mvc框架實例講解

    寫簡單的mvc框架實例講解

    在本篇內(nèi)容中教給大家寫一個簡單的mvc框架步驟以及相關(guān)知識點,有需要的朋友們學(xué)習(xí)下。
    2019-02-02
  • 使用.NET8實現(xiàn)Web API的項目實踐

    使用.NET8實現(xiàn)Web API的項目實踐

    ASP.NET Web API是一種框架,用于輕松構(gòu)建可以由多種客戶端訪問的 HTTP服務(wù),本文主要介紹了使用.NET8實現(xiàn)Web API的項目實踐,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • MVC4 基礎(chǔ) 枚舉生成 DropDownList 實用技巧

    MVC4 基礎(chǔ) 枚舉生成 DropDownList 實用技巧

    本篇文章小編為大家介紹,MVC4 基礎(chǔ) 枚舉生成 DropDownList 實用技巧。需要的朋友參考下
    2013-04-04
  • webapi中如何使用依賴注入

    webapi中如何使用依賴注入

    本篇將要和大家分享的是webapi中如何使用依賴注入,依賴注入這個東西在接口中常用,實際工作中也用的比較頻繁,因此這里分享兩種在api中依賴注入的方式Ninject和Unity。下面跟著小編一起來看下吧
    2017-02-02
  • Asp.net回調(diào)技術(shù)Callback學(xué)習(xí)筆記

    Asp.net回調(diào)技術(shù)Callback學(xué)習(xí)筆記

    這篇文章主要記錄了Asp.net回調(diào)技術(shù)Callback的一些知識,感興趣的朋友可以參考下
    2014-08-08

最新評論