主要参考文章微软官方文档: https://docs.microsoft.com/zh-cn/aspnet/core/grpc/client?view=aspnetcore-3.1
此外还参考了文章 https://www.cnblogs.com/stulzq/p/11581967.html并写了一个demo: https://files.cnblogs.com/files/hudean/GrpcDemo.zip
一、简介
gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。
gRPC 的主要优点是:
现代高性能轻量级 RPC 框架。
协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现。
可用于多种语言的工具,以生成强类型服务器和客户端。
支持客户端、服务器和双向流式处理调用。
使用 Protobuf 二进制序列化减少对网络的使用。
这些优点使 gRPC 适用于:
效率至关重要的轻量级微服务。
需要多种语言用于开发的 Polyglot 系统。
需要处理流式处理请求或响应的点对点实时服务。
二、创建 gRPC 服务
启动 Visual Studio 并选择“创建新项目”。 或者,从 Visual Studio“文件”菜单中选择“新建” > “项目” 。
在“创建新项目”对话框中,选择“gRPC 服务”,然后选择“下一步” :
将项目命名为 GrpcGreeter。 将项目命名为“GrpcGreeter”非常重要,这样在复制和粘贴代码时命名空间就会匹配。
选择“创建”。
在“创建新 gRPC 服务”对话框中:
选择“gRPC 服务”模板。
选择“创建”。
运行服务
按 Ctrl+F5 以在不使用调试程序的情况下运行。
Visual Studio 会显示以下对话框:
如果信任 IIS Express SSL 证书,请选择“是” 。
将显示以下对话框:
如果你同意信任开发证书,请选择“是”。
日志显示该服务正在侦听 https://localhost:5001
。
控制台显示如下:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
备注
gRPC 模板配置为使用传输层安全性 (TLS)。 gRPC 客户端需要使用 HTTPS 调用服务器。
macOS 不支持 ASP.NET Core gRPC 及 TLS。 在 macOS 上成功运行 gRPC 服务需要其他配置。
检查项目文件
GrpcGreeter 项目文件:
greet.proto : Protos/greet.proto 文件定义
Greeter
gRPC,且用于生成 gRPC 服务器资产。Services 文件夹:包含
Greeter
服务的实现。appSettings.json :包含配置数据,例如 Kestrel 使用的协议。
Program.cs:包含 gRPC 服务的入口点。
Startup.cs :包含配置应用行为的代码。上述准备工作完成,开始写gRPC服务端代码!
example.proto文件内容如下
syntax = "proto3";
option csharp_namespace = "GrpcGreeter";
package example;
service exampler {// Unarys rpc UnaryCall (ExampleRequest) returns (ExampleResponse);// Server streaming rpc StreamingFromServer (ExampleRequest) returns (stream ExampleResponse);// Client streaming rpc StreamingFromClient (stream ExampleRequest) returns (ExampleResponse);// Bi-directional streaming rpc StreamingBothWays (stream ExampleRequest) returns (stream ExampleResponse);
}
message ExampleRequest {
int32 id = 1;string name = 2;
}
message ExampleResponse {string msg = 1;
}
其中:
syntax = "proto3";是使用 proto3 语法,protocol buffer 编译器默认使用的是 proto2 。这必须是文件的非空、非注释的第一行。
对于 C#语言,编译器会为每一个.proto 文件创建一个.cs 文件,为每一个消息类型都创建一个类来操作。
option csharp_namespace = "GrpcGreeter";是c#代码的命名空间
package example;包的命名空间
service exampler 是服务的名字
rpc UnaryCall (ExampleRequest) returns (ExampleResponse); 意思是rpc调用方法 UnaryCall 方法参数是ExampleRequest类型 返回值是ExampleResponse 类型
1
|