Grpc 介绍
GitHub: https://github.com/grpc/grpc
gRPC 是一个高性能, 通用的开源 RPC 框架, 其由 Google 主要面向移动应用开发并基于 HTTP/2 协议标准而设计, 基于 ProtoBuf(Protocol Buffers) 序列化协议开发, 且支持众多开发语言. gRPC 提供了一种简单的方法来精确地定义服务和为 iOS,Android 和后台支持服务自动生成可靠性很强的客户端功能库. 客户端充分利用高级流和链接功能, 从而有助于节省带宽, 降低的 TCP 链接次数, 节省 CPU 使用, 和电池寿命.
gRPC 支持多种语言, 并能够基于语言自动生成客户端和服务端功能库. 目前, 在 GitHub 上已提供了 C 版本 grpc,Java 版本 grpc-java 和 Go 版本 grpc-go, 其它语言的版本正在积极开发中, 其中 grpc 支持 C,C++,Node.JS,Python,Ruby,Objective-C,PHP 和 C# 等语言, grpc-java 已经支持 Android 开发.
gRPC 已经应用在 Google 的云服务和对外提供的 API 中, 其主要应用场景如下:
低延迟, 高扩展性, 分布式的系统
同云服务器进行通信的移动应用客户端
设计语言独立, 高效, 精确的新协议
便于各方面扩展的分层设计, 如认证, 负载均衡, 日志记录, 监控等
上边是官方腔调介绍, 总结下来就几点, 跨平台, 可靠, 通信快, 扩展性强,
貌似现在还出了个前端的 grcp-web,.proto 来定义客户端 Web 应用程序和后端 gRPC 服务器之间的服务 "契约", 并自动生成客户端 JavaScript 与服务端同行
毕竟 google 出品, 不多说,????.
是骡子是马拉出来溜溜
.NET core
编写跨语言服务文件 (.proto)
具体语法可以谷歌或者百度一下, 主要方法的定义有点不一样, 但是基本就是我下面这样定义, 数据类型都是一样的. 大差不差
- syntax ="proto3";
- option java_multiple_files = true;
- option java_package = "md.logservice";
- option java_outer_classname = "Logger";
- option objc_class_prefix = "LLL";
- package gRPCTest;
- service gRPC {
- /*
- * 方法
- */
- rpc SayHello (TestRequest) returns(TestReply) {}
- }
- /*
- * 请求对象
- */
- message TestRequest {
- string name = 1;
- }
- /*
- * 返回对象
- */
- message TestReply {
- string message = 1;
- }
编写成功后, 接下来咱们就要把 proto 文件生成为 C# 代码了
先创建一个控制台项目
通过 NuGet 应用如下文件
这时开始用到了 tools, 这个 tools 就是个解析 grpc proto 文件的工具, 在 nuget 下载类库时会自动下载带目录下
建议新建一个文件夹专门用了处理 proto 文件. 这里只说 Windows 下怎么解析 proto 文件. 解析 proto 会自动生成 Markdown 接口文档, 很方便有木有
这里说一下 generate.bat 批处理文件怎么写
- setlocal
- @rem enter this directory
- cd /d %~dp0
- set TOOLS_PATH=D:\grpcTest\Tools\Grpc.Tools.1.2.0\tools\windows_x64
- set DOC_TOOL_PATH=D:\grpcTest\Tools\doc
- %TOOLS_PATH%\protoc.exe -I./protos --csharp_out build ./protos/test.proto --grpc_out build --plugin=protoc-gen-grpc=%TOOLS_PATH%\grpc_csharp_plugin.exe
- %TOOLS_PATH%\protoc.exe -I./protos --plugin=protoc-gen-doc=%DOC_TOOL_PATH%\protoc-gen-doc.exe --doc_out=Markdown,test.md:./doc protos/test.proto
- endlocal
- PAUSE
其实这就是一个批处理命令, 但是网上很多资料复制都是报错, 运行时候各种报错, 神特么烦, 也不跟你细说选项作用, 注意事项.
下面咱们就详细说说
A,set TOOLS_PATH=D:\grpcTest\Tools\Grpc.Tools.1.2.0\tools\windows_x64 就是设置 tools 解析工具所在目录, 下面一个 set 时设置接口文档生成目录, 如果不需要生成 grpc 文档, 可不写
B, -I 指定一个或者多个目录, 用来搜索. proto 文件的. 注意: 如果不指定, 那就是当前目录, 没毛病.
C,--csharp_out 生成 C# 代码, 当然了还能 cpp_out,java_out,javanano_out,js_out,objc_out,php_out,python_out,ruby_out 这时候你就应该知道, 这玩意就是支持多语言的, 才用的, 生成一些文件, 然后给各个语言平台调用. 参数 1 是输出路径, 参数 2 是 proto 的文件名或者路径.
D,--grpc_out 到这里可能有人会懵逼, 咋回事? C# 不是有一个自己的输出目录么? 怎么又一个输出?
csharp_out 是输出类似于咱们平时写的实体类, 接口, 定义之类的. 生成的文件叫, 额, 就叫 xxx.cs 吧.
grpc_out 是跟服务相关, 创建, 调用, 绑定, 实现相关. 生成的玩意叫 xxxGrpc.cs. 对比上个选项生成的文件名, 大概能了解个十之八九吧.
E,--plugin=protoc-gen-grpc=grpc_csharp_plugin.exe 这个就是 csharp 的插件, python 有 python 的, java 有 java 的. 你不指定它, 你毛都生成不了.
接下来咱们直接上代码了
代码挺简单的, 简单到我不好意思贴代码, 直接上图吧
说下需要注意的两个点, 就是客户端和服务端都需要引用生成的 grpc 文件
服务端代
客户端代码
先启动服务端, 然后启动客户端
运行成功后如下图
服务端
客户端
可以看到, 已经调用成功了.
结束
对了, 我司基本上都是用. net core 微服务了, 和其他部门都是通过微发 rpc 形式合作, 后面视情况, 可以把, 微服务 docker 部署 本地运行 k8s, 服务治理, kafka 日志收集等都分享给大家, 咱们的. net core 氛围越来越好了.
感谢各位老铁能看到最后, 谢谢
拜拜~~~(无彩蛋)
来源: http://www.bubuko.com/infodetail-2983473.html