最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用?FieldMask?提高?C#?gRpc?的服務(wù)性能

 更新時(shí)間:2022年03月03日 16:10:50   作者:My?IO  
這篇文章主要介紹了用?FieldMask?提高?C#?gRpc?的服務(wù)性能,FieldMask?是一個(gè)?protobuf?消息,包含一個(gè)名為?paths?的字段,用于指定用于指定讀取操作返回或更新操作修改的字,下文詳細(xì)內(nèi)容,需要的朋友可以參考一下

前言:

想象一下,有一個(gè)服務(wù)提供個(gè)多個(gè)客戶(hù)端調(diào)用,但不是所有客戶(hù)端都需要全部的返回參數(shù):

?比如商品列表服務(wù)返回商品的所有信息,而訂單服務(wù)調(diào)用商品列表服務(wù),但它其實(shí)只需要商品的編碼和名稱(chēng)就夠了。?

當(dāng)然,我們可以為這個(gè)需求單獨(dú)創(chuàng)建一個(gè)服務(wù),但是這樣不太靈活,比如又需要商品的編碼和分類(lèi)的時(shí)候怎么辦?

但是,大而全的服務(wù)方法會(huì)導(dǎo)致計(jì)算和傳輸成本可能很高,如果我們能夠了解響應(yīng)中哪些字段不需要提供給調(diào)用者,從而避免進(jìn)行不必要的計(jì)算和傳輸,這對(duì)提高服務(wù)性能通常是非常有益的。

在實(shí)現(xiàn) gRPC 服務(wù)時(shí),我們可以使用?protobuf FieldMask ?實(shí)現(xiàn)上述功能。

一.FieldMask

默認(rèn)情況下,gRPC 使用 protobuf 作為其接口定義語(yǔ)和數(shù)據(jù)序列化協(xié)議。

FieldMask 是一個(gè) protobuf 消息,包含一個(gè)名為 paths 的字段,用于指定用于指定讀取操作返回或更新操作修改的字段:

message FieldMask {
? repeated string paths = 1;
}

下面,讓我們看一個(gè)例子,如何在C# gRpc 服務(wù)中使用它。

二、Demo

?1.定義 .proto 文件?

在 .proto 文件中定義服務(wù)和消息:

syntax = "proto3";

option csharp_namespace = "GrpcService2";
import "google/protobuf/field_mask.proto";

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;
? google.protobuf.FieldMask field_mask = 2;
}

// The response message containing the greetings.
message HelloReply {
? string message1 = 1;
? string message2 = 2;
? string message3 = 3;
? string message4 = 4;
? string message5 = 5;
}

關(guān)鍵點(diǎn)是下面2句:

// 引用 field_mask 消息
import "google/protobuf/field_mask.proto";

//定義請(qǐng)求字段
google.protobuf.FieldMask field_mask = 2;

?2.實(shí)現(xiàn)服務(wù)端?

服務(wù)端代碼如下,返回了5個(gè)字段:

public class GreeterService : Greeter.GreeterBase
{
? ? private readonly ILogger<GreeterService> _logger;
? ? public GreeterService(ILogger<GreeterService> logger)
? ? {
? ? ? ? _logger = logger;
? ? }

? ? public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
? ? {
? ? ? ? var reply = new HelloReply
? ? ? ? {
? ? ? ? ? ? Message1 = "Hello " + request.Name + ",這是第1條消息",
? ? ? ? ? ? Message2 = "Hello " + request.Name + ",這是第2條消息",
? ? ? ? ? ? Message3 = "Hello " + request.Name + ",這是第3條消息",
? ? ? ? ? ? Message4 = "Hello " + request.Name + ",這是第4條消息",
? ? ? ? ? ? Message5 = "Hello " + request.Name + ",這是第5條消息"
? ? ? ? };

? ? ? ? return Task.FromResult(reply);
? ? }
}

?3.實(shí)現(xiàn)客戶(hù)端?

客戶(hù)端代碼如下:

using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);

FieldMask fieldMask = new FieldMask();
fieldMask.Paths.AddRange(new string[] { "message2", "message4" });

var request = new HelloRequest { Name = "My IO" };
request.FieldMask = fieldMask;

var reply = await client.SayHelloAsync(request);
? ? ? ? ? ? Console.WriteLine($@"Greeting:?
{reply.Message1}
{reply.Message2}
{reply.Message3}
{reply.Message4}
{reply.Message5}
" );

傳入了 FieldMask,這里只需要 message2、message4 字段。

運(yùn)行程序,發(fā)現(xiàn)有問(wèn)題,還是返回了所有字段:

?4.修改服務(wù)端?

這其實(shí)是在服務(wù)端沒(méi)有判斷 fieldMask,修改服務(wù)端代碼:

var mergedReply = new HelloReply();
request.FieldMask.Merge(reply, mergedReply);

return Task.FromResult(mergedReply);

結(jié)論:

在本文中,我們看到了如何使用 FieldMask ,這里僅僅是控制不返回字段,大家可以自行實(shí)現(xiàn)其他邏輯。

到此這篇關(guān)于用 FieldMask 提高 C# gRpc 的服務(wù)性能的文章就介紹到這了,更多相關(guān)用 FieldMask 提高 C# gRpc 的服務(wù)性能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# 實(shí)現(xiàn)枚舉轉(zhuǎn)列表

    C# 實(shí)現(xiàn)枚舉轉(zhuǎn)列表

    這篇文章主要介紹了C# 如何實(shí)現(xiàn)枚舉轉(zhuǎn)列表,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C#開(kāi)發(fā)Windows服務(wù)實(shí)例之實(shí)現(xiàn)禁止QQ運(yùn)行

    C#開(kāi)發(fā)Windows服務(wù)實(shí)例之實(shí)現(xiàn)禁止QQ運(yùn)行

    這篇文章主要介紹了通過(guò)C#開(kāi)發(fā)Windows服務(wù),查殺qq進(jìn)程的服務(wù)功能,需要的朋友可以參考下
    2013-10-10
  • 十大C#中最具價(jià)值的語(yǔ)法糖分享

    十大C#中最具價(jià)值的語(yǔ)法糖分享

    C#語(yǔ)言是世界最優(yōu)雅的語(yǔ)言之一,深受廣大程序員的喜歡,尤其是其中的一些語(yǔ)法糖,下面就跟隨小編一起來(lái)了解一下其中10個(gè)比較實(shí)用的語(yǔ)法糖吧
    2024-11-11
  • 人臉認(rèn)證源碼faceIdentify詳解

    人臉認(rèn)證源碼faceIdentify詳解

    這篇文章主要為大家詳細(xì)介紹了人臉認(rèn)證源碼faceIdentify的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • C#截取中英文混合指定長(zhǎng)度字符串實(shí)例

    C#截取中英文混合指定長(zhǎng)度字符串實(shí)例

    這篇文章主要介紹了C#截取中英文混合指定長(zhǎng)度字符串,大家參考使用
    2013-12-12
  • C#/VB.NET實(shí)現(xiàn)PPT或PPTX轉(zhuǎn)換為圖像功能

    C#/VB.NET實(shí)現(xiàn)PPT或PPTX轉(zhuǎn)換為圖像功能

    由于大多數(shù)便攜式設(shè)備支持瀏覽圖片而不支持瀏覽PowerPoint 文件,所以相比較而言,圖像對(duì)于用戶(hù)而言更加友好。本文將利用C#/VB.NET實(shí)現(xiàn)PPT或PPTX轉(zhuǎn)換為圖像功能,需要的可以參考一下
    2022-08-08
  • C#處理類(lèi)型和二進(jìn)制數(shù)據(jù)轉(zhuǎn)換并提高程序性能

    C#處理類(lèi)型和二進(jìn)制數(shù)據(jù)轉(zhuǎn)換并提高程序性能

    這篇文章介紹了C#處理類(lèi)型和二進(jìn)制數(shù)據(jù)轉(zhuǎn)換并提高程序性能的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C#中托管DLL和非托管DLL的區(qū)別詳解

    C#中托管DLL和非托管DLL的區(qū)別詳解

    這篇文章主要介紹了C#中托管DLL和非托管DLL的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C#實(shí)現(xiàn)格式化SQL語(yǔ)句的示例代碼

    C#實(shí)現(xiàn)格式化SQL語(yǔ)句的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)格式化SQL語(yǔ)句的功能,文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • C#中的Lazy如何使用詳解

    C#中的Lazy如何使用詳解

    這篇文章主要給大家介紹了C#中Lazy如何使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論

丹凤县| 孝义市| 吴堡县| 怀来县| 临洮县| 合山市| 陵川县| 房产| 栖霞市| 巴楚县| 泰宁县| 鄂尔多斯市| 云霄县| 岚皋县| 玉溪市| 凯里市| 大方县| 蒲城县| 天祝| 连江县| 历史| 抚宁县| 呼伦贝尔市| 江源县| 宜春市| 保靖县| 随州市| 闵行区| 寿宁县| 斗六市| 女性| 宜章县| 达州市| 荥经县| 唐山市| 新营市| 靖江市| 东乌珠穆沁旗| 玛纳斯县| 八宿县| 庆云县|