返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >用 FieldMask 提高 C# gRpc 的服务性能
  • 724
分享到

用 FieldMask 提高 C# gRpc 的服务性能

2024-04-02 19:04:59 724人浏览 薄情痞子
摘要

目录前言:一.FieldMask二、Demo​1.定义.proto文件​​2.实现服务端​​3.实现客户端​​4.修改服务端​前言: 想象一下,有一个服务提供个多个客户端调用,但不是

前言:

想象一下,有一个服务提供个多个客户端调用,但不是所有客户端都需要全部的返回参数:

​比如商品列表服务返回商品的所有信息,而订单服务调用商品列表服务,但它其实只需要商品的编码和名称就够了。​

当然,我们可以为这个需求单独创建一个服务,但是这样不太灵活,比如又需要商品的编码和分类的时候怎么办?

但是,大而全的服务方法会导致计算和传输成本可能很高,如果我们能够了解响应中哪些字段不需要提供给调用者,从而避免进行不必要的计算和传输,这对提高服务性能通常是非常有益的。

在实现 grpc 服务时,我们可以使用​protobuf FieldMask ​实现上述功能。

一.FieldMask

默认情况下,grpc 使用 protobuf 作为其接口定义语和数据序列化协议。

FieldMask 是一个 protobuf 消息,包含一个名为 paths 的字段,用于指定用于指定读取操作返回或更新操作修改的字段:

message FieldMask {
  repeated string paths = 1;
}

下面,让我们看一个例子,如何在C# gRpc 服务中使用它。

二、Demo

​1.定义 .proto 文件​

在 .proto 文件中定义服务和消息:

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;
}

关键点是下面2句:

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

//定义请求字段
google.protobuf.FieldMask field_mask = 2;

​2.实现服务端​

服务端代码如下,返回了5个字段:

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.实现客户端​

客户端代码如下:

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,这里只需要 message2message4 字段。

运行程序,发现有问题,还是返回了所有字段:

​4.修改服务端​

这其实是在服务端没有判断 fieldMask,修改服务端代码:

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

return Task.FromResult(mergedReply);

结论:

在本文中,我们看到了如何使用 FieldMask ,这里仅仅是控制不返回字段,大家可以自行实现其他逻辑。

到此这篇关于用 FieldMask 提高 C# gRpc 的服务性能的文章就介绍到这了,更多相关用 FieldMask 提高 C# gRpc 的服务性能内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 用 FieldMask 提高 C# gRpc 的服务性能

本文链接: https://lsjlt.com/news/141093.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 用 FieldMask 提高 C# gRpc 的服务性能
    目录前言:一.FieldMask二、Demo​1.定义.proto文件​​2.实现服务端​​3.实现客户端​​4.修改服务端​前言: 想象一下,有一个服务提供个多个客户端调用,但不是...
    99+
    2024-04-02
  • 怎么用FieldMask提高C#的gRpc服务性能
    这篇文章主要介绍“怎么用FieldMask提高C#的gRpc服务性能”,在日常操作中,相信很多人在怎么用FieldMask提高C#的gRpc服务性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Fiel...
    99+
    2023-06-29
  • 提高NodeJS中SSL服务的性能
    在浏览互联网时,我们都知道,通过SSL进行加密是非常重要的。在贝宝(PayPal),安全是我们的首要任务。我们使用端到端的加密,不仅只是我们的公共网站,对于我们的内部服务调用也同样如此。SSL加密技术将在很...
    99+
    2022-06-04
    性能 NodeJS SSL
  • 如何提高服务器的性能
    这篇文章主要介绍“如何提高服务器的性能”,在日常操作中,相信很多人在如何提高服务器的性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何提高服务器的性能”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!卸载...
    99+
    2023-06-07
  • 如何提高服务器性能
    提高服务器性能的方法:1、使用内存数据库,将数据放在内存中;2、使用RDD,加快数据处理速度;3、增加服务器缓存来降低访问磁盘带来的时间消耗;4、使用SSD来代替机械硬盘。具体内容如下:使用内存数据库内存数据库,其实就是将数据放在内存中直接...
    99+
    2024-04-02
  • 怎么提高mysql服务性能
    分享几个提高mysql服务性能的技巧开启查询缓存大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的...
    99+
    2024-04-02
  • 如何提高香港服务器租用的性能
    提高香港服务器租用性能的方法:1、给租用的香港服务器增加内存容量;2、将香港服务器的硬盘更换成优质的硬盘;3、使用SCSI接口卡;4、使用RAID独立冗余磁盘阵列;5、将香港服务器的处理器进行升级。具体内容如下:增加内存容量网站服务器的访问...
    99+
    2024-04-02
  • 利用 C++ 特性提升服务器架构性能
    充分利用 c++++ 特性,如并发性、模板编程和内存管理,可以显著提高服务器架构性能:1. 通过使用线程和多线程,可以并行执行多个任务,提高吞吐量。2. 模板编程可以在编译时生成代码,避...
    99+
    2024-05-15
    c++ 服务器架构
  • 如何提高香港服务器的性能
    以下是提高香港服务器性能的一些方法: 使用高性能硬件:选择高性能的服务器硬件,包括CPU、内存、硬盘和网络适配器,以确保服务器具...
    99+
    2024-04-02
  • 云服务器安全性如何提高性能
    云服务器提供了高性能、可靠性和易用性,使用户能够轻松地管理和配置他们的应用程序。以下是提高云服务器性能的一些方法: 性能优化:优化服务器性能是提高云服务器性能的重要因素。确保使用最佳的硬件和软件、减少服务器硬件故障和优化数据库、缓存和索...
    99+
    2023-10-26
    安全性 性能 服务器
  • 如何提高香港服务器性能
    提高香港服务器性能的方法:1、将香港服务器进行虚拟化操作;2、使用管理工具来提升香港服务器管理效率;3、升级香港服务器的配置来提高服务器性能。具体内容如下:将服务器虚拟化如果同期拥有多个项目,增加额外服务器会显得浪费,成本费用也会大幅度上升...
    99+
    2024-04-02
  • 如何提高服务器的抗攻击性能
    提高服务器的抗攻击性能的方法有:1、提高服务器的抗攻击性能要采用性能高的网络设备,尽量选择知名度高且口碑好的服务器设备;2、提高服务器的抗攻击性能要尽可能避免使用NAT;3、提高服务器的抗攻击性能要保证有充足的网络带宽;4、提高服务器的抗攻...
    99+
    2024-04-02
  • 提高阿里云服务器性能的方法
    阿里云作为国内领先的云计算服务提供商,为用户提供了强大的服务器资源。然而,随着业务的发展和用户量的增长,服务器性能可能会受到各种因素的影响而降低。本文将介绍一些提高阿里云服务器性能的方法,帮助用户优化服务器性能,提升业务效率。方法一:合理...
    99+
    2024-01-16
    阿里 性能 服务器
  • 怎么提高服务器的抗攻击性能
    要提高服务器的抗攻击性能,可以采取以下几种措施: 使用防火墙:配置防火墙可以过滤网络流量,防止恶意攻击者进入服务器系统。 更...
    99+
    2024-04-09
    服务器
  • 提高C# StringBuilder操作性能优化的方法
    目录1. 在Visual Studio中创建一个控制台应用程序项目2. 安装 BenchmarkDotNet NuGet包3. 使用 StringBuilderCache 来减少分配...
    99+
    2024-04-02
  • 租用香港服务器如何其提高性能
    提高租用香港服务器性能的方法:1、给租用的香港服务器增加内存容量;2、将香港服务器的硬盘更换成优质的硬盘;3、使用SCSI接口卡,提高服务器性能;4、使用RAID独立冗余磁盘阵列,提高性能以及安全性;5、将香港服务器的处理器进行升级。具体内...
    99+
    2024-04-02
  • 怎么使用Python提供高性能计算服务
    这期内容当中小编将会给大家带来有关怎么使用Python提供高性能计算服务,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言python具有丰富的库,并且很容易作为胶水语言...
    99+
    2024-04-02
  • C#中如何使用异步编程提高性能
    C#中如何使用异步编程提高性能引言:在现代软件开发中,性能是一个非常关键的因素。提高应用程序的性能有助于提升用户体验,同时减少资源的使用和提高系统的可伸缩性。在C#中,使用异步编程是一种常见的提高性能的方式。本文将介绍如何在C#中使用异步编...
    99+
    2023-10-22
    性能优化 使用技巧 C#异步编程
  • 租用的香港服务器该如何其提高性能
    提高租用香港服务器性能的方法:1、给租用的香港服务器增加内存容量;2、将香港服务器的硬盘更换成优质的硬盘;3、使用SCSI接口卡;4、使用RAID独立冗余磁盘阵列;5、将香港服务器的处理器进行升级。具体内容如下:增加内存容量网站服务器的访问...
    99+
    2024-04-02
  • Apache服务器如何提高Go应用程序的性能?
    随着互联网技术的快速发展,Go语言在Web应用程序开发方面变得越来越流行。然而,对于高并发和大量数据处理的应用程序,Go语言本身并不能完全满足要求。这时,使用Apache服务器来提高Go应用程序的性能就成为了一个不错的选择。 Apache...
    99+
    2023-08-05
    apache 文件 numy
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作