DotNetCore 基于gRPC进行通信

本文介绍了如何在DotNetCore中利用gRPC进行通信,详细讲解了.proto文件的作用,以及如何编译proto文件。接着展示了如何设置公共类库、创建服务端和客户端代码,提供了一个简单的入门指南,鼓励读者深入学习gRPC的相关知识。

关于gRPC

		有了 gRPC, 我们可以一次性的在一个 .proto 文件中定义服务并使用任何支持它的语言去实现客户端和服务器,
	反过来,它们可以在各种环境中,从Google的服务器到你自己的平板电脑, gRPC 帮你解决了不同语言间通信的复杂性
	以及环境的不同。使用 protocol buffers 还能获得其他好处,包括高效的序列号,简单的 IDL 以及容易进行的接口
	更新。
																									----摘自官方文档 

什么是.proto文件?

	protocol-buffers 是由google 出品的,一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议。
可以用于网络通信和数据存储。其文件后缀名为.protot

开始噶事

首先我们创建一个文件夹在文件夹中创建一个后缀名为 .proto的文件
我的文件就起名为Test.proto
//声明语法
syntax="proto3";
//下面写命名空间的地址也就是JAVA的包名
package GRPCClassLib;

//java 的包名
option java_package="com.GRPCClassLib";
//Java的类名
option java_outer_classname="GRPCTest";
//c# 的命名空间
option csharp_namespace="GRPCClassLib.GRPCTest";


service test
{
  rpc TestMethod (SearchResponse ) returns (ResponseDto);
}

//每个字段由字段限制、字段类型、字段名和编号四部分组成


message SearchResponse 
{
  int32 code=1;
}

message ResponseDto
{
   int32 Code=1;
   string Respons=2;
}

message Respons
{
    string Id=1;

    string msg=2;
}

接下来就是编译我们所写的 proto文件了。
我直接写(chao)了个 批处理程序,
废话不多说上代码
//如果你没有.prop的编译工具的话,先把这段给略过,等会再回来看也行

@rem 生成客户端和服务器端存根

setlocal

@rem 进入当前目录

cd /d %~dp0

set TOOLS_PATH= 编译工具所在的地址//我是使用dotnetCore NuGet包下载的 gPRC.Tool 工具,所以是 包所在地址

%TOOLS_PATH%\protoc.exe ^
--proto_path 这里写proto文件所在的目录地址 ^
--csharp_out= 文件输出保存的目录(下同) ^
--java_out= ^ //这个代表Java的输出
--python_out= ^ //这个代表?的输出
--grpc_out=^ 这个是Grpc的输出
--plugin=protoc-gen-grpc=%TOOLS_PATH%\grpc_csharp_plugin.exe ^

这里写文件文件的地址/Tests.proto

endlocal
timeout 10

下面是生成的文件

在这里插入图片描述

gRPC应用在DotnetCore中

接下来就是将生成的代码应用在项目中了!
第一步打开VS 这个就不用我说了吧!
这里我们创建两个个控制台程序
一个作为服务端、一个作为客户端
然后在创建一个类库作为公共的gRPC类库
然后我们引用Google的NUGet包

Install-Package Grpc

Install-Package Google.Protobuf
//这两个包是三个项目都需要引用的
然后是
Grpc.Tools这个Nuget包 这个主要是下载proto的编译工具,其实不需要引到项目里面,但是没有的同学可能要去下载了

Install-Package Grpc.Tools	
然后就是运行编译命令了,一般编译工具的地址在packed文件夹里面,但是Core的packed文件夹并不是按项目分的,所以一般都是 
C:\Users\用户名\.nuget\packages\grpc.tools\1.22.0-pre1\tools\windows_x64
Linux的同学呢,自己找一下吧。

设置公共类库

其实很简单,就是将生成的两个CS文件给放进去
在这里插入图片描述

创建服务端代码

首先呢,创建一个服务类

这里起名 TestService.cs
然后项目引用公共类库
当前服务类继承公共类库中的
在这里插入图片描述


using Grpc.Core;
using GRPCClassLib.GRPCTest;
using System.Threading.Tasks;

namespace DemoServer
{
    public class TestService : test.testBase
    {
        public override Task<ResponseDto> TestMethod(SearchResponse request, ServerCallContext context)
        {
        	//这里写逻辑
            //设置返回类型
            ResponseDto response = new ResponseDto();

            if (request.Code == 1)
            {
                response.Code = 200;
                response.Respons = "成功响应!";
            }
            else
            {
                response.Code = 201;
                response.Respons = "参数异常";
            }

            return Task.FromResult(response);
        }

    }
}

然后配置服务端代码

using Grpc.Core;
using GRPCClassLib.GRPCTest;
using System;

namespace DemoServer
{
    public class Program
    {
        const int ports = 9394;
        public static void Main(string[] args)
        {
            Server server = new Server
            {
                Services =
                {
                   test.BindService( new TestService());
                },
                Ports =
                {
                    new ServerPort("localhost", ports, ServerCredentials.Insecure),
                }
            };
            server.Start();
            Console.WriteLine("任意键退出...");
            Console.ReadKey();
            server.ShutdownAsync().Wait();

        }
    }
}

配置客户端代码


using Grpc.Core;
using GRPCClassLib.GRPCTest;
using System;

namespace DemoClient
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("开始");
            Channel channel = new Channel("127.0.0.1:9394", ChannelCredentials.Insecure);
            var Client = new test.testClient(channel);
            var replyAsync = Client.TestMethod(new SearchResponse { Code = 1 });

            Console.WriteLine(replyAsync.Respons);
            Console.WriteLine(reply.Message);
            channel.ShutdownAsync().Wait();
            Console.WriteLine("任意键退出...");
            Console.ReadKey();
        }
    }
}

完成

在这里插入图片描述

结束语

上面写的这只是皮毛中的皮毛,要啥自行车!
恭喜你半只脚踏进来了,剩下的自己慢慢学习吧
我也只会这点,我也要学习去了
我会将示例代码上传的
https://download.csdn.net/download/capf_sky/11264727 下载地址

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值