首页 > 其他分享 >.NET CORE 之 gRPC使用

.NET CORE 之 gRPC使用

时间:2023-10-16 10:35:09浏览次数:48  
标签:CORE google proto gRPC docs grpc https NET

gRPC简单介绍

gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架(google开源的rpc框架)。gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制(也可以使用其他数据格式如 JSON)

 

gRPC 的主要优点是:

 

HTTP2传输

现代高性能轻量级 RPC 框架。

协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现。

可用于多种语言的工具,以生成强类型服务器和客户端。

支持客户端、服务器和双向流式处理调用。

使用 Protobuf 二进制序列化减少对网络的使用。

这些优点使 gRPC 适用于:

 

效率至关重要的轻量级微服务。

需要多种语言用于开发的系统。

需要处理流式处理请求或响应的点对点实时服务。

 

支持语言

https://grpc.io/docs/languages/

 

 

 

 

 

 

Protobuf Proto3对应各语言类型 

Proto3 参考:https://developers.google.com/protocol-buffers/docs/proto3

Proto2 参考:https://developers.google.com/protocol-buffers/docs/proto

 

 

 

 

 

除以上类型,还可以自定义类型

可null类型(google扩展包)

需要导入google.protobuf 包

 import "google/protobuf/wrappers.proto"

 

 

 

google.protobuf 包内容

 

 

 

创建.Net Core gRpc Server项目

运行环境:Window10 ,Visual Studio 2019, Net Core 3.1

 

 

 

创建成功后,项目自动生成Protos文件与Services

 

 

 

 

注意几个点

1. 一个proto文件对应一个Service服务

2. 注入

services.AddGrpc();

当新增一个proto文件和Service服务后,添加以下对应注入

app.UseEndpoints(endpoints => {

endpoints.MapGrpcService<GreeterService>();

});

 

3. NuGet包引入

Grpc.AspNetCore

Grpc.Tools

Google.Protobuf

 

 

 

4. 指定Protobuf服务端

默认情况下,会为 Protobuf项组中每个 .proto 文件都生成服务器和客户端资产。 若要确保服务器项目中仅生成服务器资产,请将 GrpcServices 属性设置为 Server。

 

多个proto时,可配置Protos\*.proto

 

 

 

5. 自动生成代码

根据proto文件自动生成.net 代码,当前项目obj\Debug\netcoreapp3.1目录下

 

Proto文件语法说明

我们习惯把通用的单独定义一个common.proto文件,然后通过import方式导入使用,包名.消息名; 集合类型定义使用repeated,枚举类型定义 enum

 

greeter.proto

 

 

common.proto

 

 

 

 

创建.Net Core gRpc Client项目

1. 创建项目

这里创建一个单元测试项目来做client调用

 

 

 

2. 拷贝Protos

把Service项目的Protos整个目录拷贝到项目根目录下

 

3. NuGet包引入

Grpc.AspNetCore

Grpc.Tools

Google.Protobuf

 

4. .csproj配置

确保服务器项目中仅生成客户端资产,请将 GrpcServices 属性设置为 Client。

 

<ItemGroup>

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

  </ItemGroup>

 

 

5. 添加UnitTest1.cs 单元测试

 

 

 

gRpc使用Http2传输,设置https调用

AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);

 

GreeterClient 为proto文件自动生成的客户端资产

 

 

gRPC 调试

传统方式

启动Server  与  Client 两个项目,右键解决方案属性 进行设置

 

 

 

命令模式

运行-> cmd -> F:

切换到Client项目目录:cd F:\demo\gRPCDemo\TestProjectUnitDemo

执行命令:dotnet test --filter 类名.方法

例如:dotnet test --filter UnitTest1.GetById

 

 

结束 OVER

 

参考学习地址

https://grpc.io/docs/what-is-grpc/introduction/

https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.1

https://docs.microsoft.com/zh-cn/aspnet/core/grpc/protobuf?view=aspnetcore-3.1#scalar-value-types

https://github.com/grpc/

标签:CORE,google,proto,gRPC,docs,grpc,https,NET
From: https://www.cnblogs.com/tudouxqc/p/17761685.html

相关文章

  • Networking
    Computernetworksusenetworkprotocolstocommunicatewitheachother.Networkprotocolsareoftenabstractedintodifferentlayers.Forexample,OpenSystemsInterconnection(OSI)describessevenlayersofcommunicationprotocols—startingfromtheapp......
  • 使用 Kubernetes 简化平台工程
    平台工程在现代应用程序开发和部署中发挥的作用至关重要。随着软件应用程序变得越来越复杂和分散,对稳健且可扩展的基础设施的需求变得越来越重要。这就是平台工程的作用所在,它是支持整个软件开发生命周期的支柱。让我们深入探讨平台工程在创建和维护应用程序基础设施方面的重要作......
  • [转]记一次升级.net 4.7.2版本出现未能加载文件或程序集“System.Net.Http"
    转自【https://www.cnblogs.com/ldybyz/p/13932978.html】webconfig的配置<dependentAssembly><assemblyIdentityname="System.Net.Http"publicKeyToken="b03f5f7f11d50a3a"culture="neutral"/><bindingRedirectoldVersion=&quo......
  • 详解.NET依赖注入中对象的创建与“销毁”
    在DI容器中注册类型,DI容器就可以帮我们创建类型的实例;如果注册类型实现了IAsyncDisposable或者IDisposable接口,对象销毁时DI容器还会帮我们调用DisposeAsync或Dispose方法。这是如何实现的呢?一起来看看吧。本文是基于DependencyInjection8.0编写。如果已熟练使用,可以直接从第三......
  • 为.NET打开新大门:OpenVINO.NET开源项目全新发布
    为.NET打开新大门:OpenVINO.NET开源项目全新发布在AI的应用越来越广泛的今天,优化深度学习模型并进行推理部署已经成为了一门必要的技术。Intel开发的OpenVINO工具包(OpenVisualInferenceandNeuralnetworkOptimization)就是这样一款强大的工具。作为一个开源的工具包,OpenVINO为......
  • 多文件异步读取.Net组件
    一个高性能、低内存文件上传流.Net组件一个高性能、低内存文件上传流.Net组件   推荐一个用于轻松实现文件上传功能的组件。项目简介一个基于.NET平台的开源项目,提供了一个简单易用的API,可以在Web应用程序中快速集成文件上传功能。优化多部分流式文件上传性能:减......
  • Kubernetes 网络简单介绍
    后续会详细展示其原理并验证下,这里先汇总下,水平比较有限。Kubernetes网络模型Kubernetes使用一个称为CNI(ContainerNetworkInterface)的接口标准,使其网络实现与具体的网络插件解耦。Kubernetes网络模型有以下几个重要的原则:所有Pod都在一个扁平的共享网络中:每个Pod都有一个......
  • Graph Wave Net模型中的数据集hdf5和pkl文件的读取问题
    引入:GraphWaveNet的流量数据的文件格式是.h5,路网结构文件格式是.pkl,它们怎么打开呢?HDF5HDF5文件一般以.h5或者.hdf5作为后缀名,其中包含两种结构:Group(文件夹)和Datasets(数据)python可以使用h5py或pandas打开.h5文件h5pypath='metr-la.h5'f=h5py.File(path,'r')......
  • 【Dotnet篇】Dotnet CLI常用命令
    dotnet--list-sdks//列出已经安装的sdk版本信息dotnet--list-sdksdotnet--list-runtimes//列出已经安装的运行时版本信息dotnet--list-runtimesdotnetnugetlistsource//这会列出当前配置的所有NuGet包源。dotnetnugetlistsource//添加新的NuGet包源do......
  • 安装kubernetes-v1.26.9集群,安装配置calico网络
    安装kubernetes-v1.26.9集群,安装配置calico网络1、配置基础环境1、资源规划一共三台主机,安装配置一个master01,两个worker01master01:192.168.2.10worker01:192.168.2.11worker02:192.168.2.12镜像仓库服务器:192.168.2.20VMware虚拟机规格:CentOSLinux7(Core)2核CPU、3G内......