热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.NET6中使用GRPC详细描述

Supportedlanguages|gRPC,官网。至于原理就不说了,可以百度原理之后,然后再结合代码,事半功倍ÿ

Supported languages | gRPC,官网。至于原理就不说了,可以百度原理之后,然后再结合代码,事半功倍,就能很好理解GRPC了。

目录

一、简单使用

二、实际应用 



一、简单使用

1.使用vs2022创建一个grpc程序,直接就默认值,下一步

 

2.文件说明

 

文件1:就是对外面调用的自定义协议,也可以理解是接口,双方必须规定一致性,把写的方法暴露出去。

文件2:就是一般写的方法,业务逻辑。

greet.proto文件

Greeter 定义的服务名字

这里结合下面写的,SayHello方法名字,HelloRequest请求参数,HelloReply返回的参数

3.此时,默认的程序就是一个服务端,那么我们就创建一个客户端去访问它

为了方便我们建立一个控制台程序,实际情况,什么程序都是可以的

 

4.客户端需要安装3个包

Google.Protobuf

Grpc.Net.Client

Grpc.Tools

 

5. 然后把服务端的这个文件夹整体拿过来放在客户端下面

这个意思就是,他们有共同的协议,就互通了

 

6.同理,也把服务端的ItemGroup复制到客户端

把Server改成Client

千万别把上面的替换了,这句在最下面



7.然后在Program中调用

using Grpc.Net.Client;
using GrpcService1;
namespace ClientGRPC
{
internal class Program
{
static void Main(string[] args)
{
string url = "https://localhost:5001"; //https
using (var channel = GrpcChannel.ForAddress(url))
{
var client = new Greeter.GreeterClient(channel);
var reply = client.SayHello(new HelloRequest()
{
Name = "故里2130"
});
Console.WriteLine($"结果:message:{reply.Message}");
}
Console.ReadKey();
//AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); //http调用
//string url = "http://localhost:5000";
//using (var channel = GrpcChannel.ForAddress(url))
//{
// var client = new Greeter.GreeterClient(channel);
// var reply = client.SayHello(new HelloRequest()
// {
// Name = "故里2130"
// });
// Console.WriteLine($"结果:message:{reply.Message}");
//}
//Console.ReadKey();
}
}
}

8.效果

 

这样,我们就完成了,简单的使用过程,和webapi的效果差不多。但是它的速度远远大于webapi。

补充:在IOC注入的方式调用GRPC,后面可以参考源码

二、实际应用

实际中使用,我们应该结合webapi和grpc一起使用的

其实就是把刚才创建的GrpcService1全部迁移到webapi中就行了

1.安装包Grpc.AspNetCore 

2.复制文件

3.创建GreeterService.cs,直接复制就行了

using Grpc.Core;
using GrpcService1;
namespace webapiGRPC.Controllers
{
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger _logger;
public GreeterService(ILogger logger)
{
_logger = logger;
}
public override Task SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
}

4.在Program.cs中注入

using GrpcService1;
using webapiGRPC.Controllers;
namespace webapiGRPC
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddGrpc();
var app = builder.Build();
// Configure the HTTP request pipeline.
//if (app.Environment.IsDevelopment())
//{
app.UseSwagger();
app.UseSwaggerUI();
//}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapGrpcService();
app.MapControllers();
app.Run();
}
}
}

所有文件

 

5.运行webapi和刚才的控制台程序看效果

 

可以看到,webapi和控制台程序全部通了 

 




推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
author-avatar
大美妞meilei
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有