DotNetCore 基于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