什么是grpc?

grpc来自大名鼎鼎的谷歌,孵化于CNCF基金会(docker、k8s同样出自这个基金会)。它是一款高性能、开源、通用的rpc框架,你可以通过它来定义rpc的请求和响应。它基于http/2,全双工通信、低延迟、高效率、支持流、可轻松的插入身份认证、负载均衡、监控日志等等等等。。。关键是它还可以跨语言操作。只要server端或client端是它支持的语言编写,都可以跨语言操作。官方支持的开发语言:

什么是rpc?

rpc,全称Remote Procedure Call,通过它,你可以像调用本地方法一样调用远程服务。前端可以调用后端方法,后端也可以调用前端方法。其实这个概念并不陌生,上一篇关于web实时应用的文章也提到了这个概念,并实现了前后端互调的操作。

在正式开始使用grpc之前,我们还需要掌握protocol buffer的概念。

为什么用protocol buffer?

因为grpc采用合约优先的API开发模式,默认采用protocol buffer作为接口设计语言,我们可以在proto文件里定义消息和服务。当然,作为默认选项,它自然是有优势的,主要是这些:

1、语法简单,容易上手。

2、可生成所有(官方称)主流开发语言的代码。

3、二进制格式,效率高的同时也很适合大数据传输。

了解完基础以后,先上一个小demo参考一下:

syntax = "proto3";

import "aaa.proto";
option csharp_namespace = "gRPCApiDemo.Protos"; package Demo; service Math{
rpc Add (AddRequest) returns (AddRespones);
} message AddRequest{
int32 a=;
int32 b=;
} message AddRespones{
int32 a=;
repeated int32 b=;
  reserved 3,4 to 10;
  reserved "phone";
}

解读一下:

syntax:声明当前使用的语法

import:引入其他proto

option csharp_namespace:打包以后类的命名空间,优先级高

package:打包以后类的命名空间,优先级低

service:声明服务

rpc Add (AddRequest) returns (AddRespones):声明一个rpc调用,接收AddRequest消息,返回AddRespones消息。

message:声明消息

int32:数据类型,常用的还有int64、float、string、bool等,有兴趣的可以去查一下。

a=1:如果把a看作字段名,那么1相当于字段名的别名。

repeated:可重复字段。如果给b多个值,那么b差不多相当于一个int类型的数组,先后顺序会被保留。

reserved:保留字段,声明以后的字段名和别名都不允许再使用了。需要注意字段名和别名不能一起声明。

编译proto

proto编译的主要目的是生成代码。

首先是工具,点击这里,选出适合自己系统的插件,如图:

下载完以后随便找个目录解压,然后把其中的bin目录添加到环境变量里:

如果在控制台输入protoc可以看到一堆信息弹出来,就表示安装成功了:

在我们使用protoc把proto文件编译成c#文件之前,我们还需要做这些:

1、指定proto项目路径。

可以用rotoc --IPath(或--proto_path)或者直接打开控制台转到protoc安装目录。

2、指定生成文件的类型和路径。

protoc --csharp_out=cs grpcApi.proto   //如果有多个proto文件想批量生成可以使用  *.proto

上面的cs是我新建的文件夹名(这个文件夹是建立在proto项目目录下的),grpcApi.proto是自建的proto文件,执行结果见图:

成功以后会在指定的目录下生成cs文件,见图:

生成的文件和proto文件命名一样,只不过首字母会自动大写,打开看看:

好吧能看懂的有限,所以看看就行了。

不过有一点千万注意:这个cs文件不要手动改,不要手动改,不要手动改!

关于应用

能使用编译器生成代码就可以用了么?其实还差很多。距离正式应用还差服务端和客户端的编写部署。

不过因为时间问题,在这一篇写不完。下一篇再见~

最新文章

  1. 初识ASP.NET Core 1.0
  2. 解决FragmentTabHost切换标题栏变更问题
  3. 提高MYSQL百万条数据的查询速度
  4. regexxx
  5. HDU 2222 关键词查找
  6. hdu5432 二分
  7. 如何读懂 Intel HEX 文件
  8. SWD应用接口
  9. IIS ASP.NETWEB站点部署时遇到的问题记录
  10. 浅谈.prop() 和 attr() 的区别
  11. C#有关 字符串方法的使用
  12. GitHub的css/js文件给墙了的解决方法
  13. QT5-控件-QFontComboBox-字体选择下拉列表,使用一个标签查看效果
  14. [转]Linux挂载点介绍及桌面服务器分区方案
  15. SPFA求最短路——Bellman-Ford算法的优化
  16. pytest简介
  17. Skeleton Screen -- 骨架屏--应用
  18. Xamarin打包
  19. K-DTree学习
  20. 数据包编辑工具bittwiste

热门文章

  1. Java实现 神犇的悲惨一生
  2. Android如何使用OKHttp
  3. CSS清除浮动&内容居中&文字溢出
  4. linux系统判断内存是否达到瓶颈的小技巧
  5. OO第一作业周期(前四周)总结
  6. tensorflow2.0学习笔记第一章第五节
  7. zabbix 交换机端口显示端口描述
  8. 提高编译速度! 第一次运行需要注释掉,不然会报错,因为需要编译SO库文件 !
  9. PCB制图--VCC、VDD、VEE、VSS、VDDA、VSSA
  10. PIP 更换国内安装源