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
千万别把上面的替换了,这句在最下面
<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
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<GreeterService> _logger; public GreeterService(ILogger<GreeterService> logger) { _logger = logger; } public override Task<HelloReply> 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<GreeterService>(); app.MapControllers(); app.Run(); } } }
5.在项目文件中,增加如下代码
然后点击生成
如果报错的话,一定要注意greet.proto中你写的命名空间,命名空间是什么,那么就引用什么,否则继承的时候,一直报错
<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Server" /> </ItemGroup>
所有文件
6.运行webapi和刚才的控制台程序看效果
可以看到,webapi和控制台程序全部通了
此时,我们就可以全部使用了,对自己的软件调用GRPC,增加效率。对外部的软件使用webapi,比较安全
源码:
Net6GrpcService: Net6GrpcService
到此这篇关于.NET6中使用GRPC的示例代码的文章就介绍到这了,更多相关.NET6使用GRPC内容请搜索好代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好代码网!