Golang - 关于 proto 文件的一点小思考
前言
ProtoBuf 是什么?
ProtoBuf 是一套接口描述语言(IDL),通俗的讲是一种数据表达方式,也可以称为数据交换格式。
我们常用的数据格式有 JSON 和 XML,为什么使用 ProtoBuf ?是因为它的传输快,为什么传输快?大家可以找下资料。使用 .proto 文件进行描述要序列化的数据结构,然后将写好 .proto 文件使用 protoc 就可以很容易编译成众多计算机语言的接口代码。
gRPC 是什么?
gRPC 是开源的 RPC 框架,已支持主流的计算机语言,可以通过 ProtoBuf 进行定义接口,可以基于 ProtoBuf 进行数据传输。
两者虽然是一家,但是分别解决不同的问题,可以配合使用,也可以分开。
看一下的 gRPC helloworld 的 proto 文件是如何定义的?
helloworld.proto
syntax = "proto3";
package helloworld;
option go_package = "./;helloworld";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
文件中定义了一个 service Greeter 和 rpc SayHello 方法。
入参:string name
出参:string message
这些过于简单,还能不能描述其他信息?
小思考
定义的
rpc方法能否也同时支持HTTP调用?例如:SayHello 方法,既支持 gRPC 调用,也支持 HTTP 调用,同时支持protoc生成代码时,同时也生成Swagger接口文档。定义的入参能否支持参数验证?例如:name 长度不能大于 20 个字符。
定义的
serviceGreeter 服务能否支持拦截器?例如:该服务下的所有方法需要进行登录令牌验证。定义的
rpcSayHello 方法能够支持拦截器?例如:当前方法支持开启和关闭是否记录日志。
小结
以上问题还未完全解决,学习 gRPC 感觉有些吃力...
大家有没有可以推荐的学习资源?目前在看 grpc-gateway 。
推荐阅读
- Go - 使用 sync.WaitGroup 来实现并发操作
- Go - 使用 sync.Map 解决 map 并发安全问题
- Go - 基于逃逸分析来提升程序性能
- Go - 使用 sync.Pool 来减少 GC 压力
- Go - 使用 options 设计模式
Golang - 关于 proto 文件的一点小思考的更多相关文章
- 信号处理——EMD、VMD的一点小思考
作者:桂. 时间:2017-03-06 20:57:22 链接:http://www.cnblogs.com/xingshansi/p/6511916.html 前言 本文为Hilbert变换一篇的 ...
- MySQL-Front 建表引发的一点小思考(数据表格模版)
我们建表的时候,有一些字段总是会常用到的.也就是每一张表都会有这些字段. 我用mysql有一点时间了,今天(2016-02-27 21:53:38)在用mysql-front建表的时候,感觉有点点不太 ...
- xss和实体编码的一点小思考
首先,浏览器渲染分以下几步: 解析HTML生成DOM树. 解析CSS生成CSSOM规则树. 将DOM树与CSSOM规则树合并在一起生成渲染树. 遍历渲染树开始布局,计算每个节点的位置大小信息. 将渲染 ...
- sqlserver数据库不能重命名报错5030——我的一点小思考
在学习asp.net的时候使用mssql‘经常会出现这种错误,数据库不能重名名5030的错误,其实很简单原因就是有应用程序正在占用这个连接,使用这样一行命令就可以查询出正在占用的连接 use mast ...
- Google Protocol Buffer的安装与.proto文件的定义
什么是protocol Buffer呢? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准. 我理解的就是:它是一种轻便高效的结构 ...
- 关于win8开发的一点小总结
我今天做画面的时候,发现了一点小问题. 我在xmal文件里面加了一个CheckBox控件,设置IsChecked属性为True,并添加了Checked事件.Checked事件里面有对另外一个TextB ...
- [原创].NET 分布式架构开发实战之三 数据访问深入一点的思考
原文:[原创].NET 分布式架构开发实战之三 数据访问深入一点的思考 .NET 分布式架构开发实战之三 数据访问深入一点的思考 前言:首先,感谢园子里的朋友对文章的支持,感谢大家,希望本系列的文章能 ...
- Google Protocol Buffer的安装与.proto文件的定义(转)
转自(https://www.cnblogs.com/yinheyi/p/6080244.html) 什么是protocol Buffer呢? Google Protocol Buffer( 简称 P ...
- ProtoBuffer由.proto文件生成.cc/.h
ProtoBuffer由.proto文件生成.cc/.h 一:编译源码下载地址:http://code.google.com/p/protobuf/downloads/list 下载后,根据编译说明进 ...
随机推荐
- DOS命令和快捷键
- 关于takin-data,你想知道的都在这里(一)启动命令篇
通过docker部署体验takin的小伙伴都应该知道,在安装部署手册中有提到:在启动surge-deploy任务前,需要将启动命令中的ip参数替换为docker容器所在宿主机的ip,很多小伙伴都在这里 ...
- 离线状态迁移Anaconda虚拟环境
离线状态迁移Anaconda虚拟环境 同样是项目需求,需要布署的服务器上的Anaconda安装到了普通账户下 而后续所有的内容都需要通过root账户进行操作,而服务器已经布署,联网比较麻烦 本文提出, ...
- JVM:Java中的引用
JVM:Java中的引用 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 在原来的时候,我们谈到一个类的实例化 Person p = new Person() 在 ...
- 2021.9.22考试总结[NOIP模拟59]
T1 柱状图 关于每个点可以作出两条斜率绝对值为\(1\)的直线. 将绝对值拆开,对在\(i\)左边的点\(j\),\(h_i-i=h_j-j\),右边则是把减号换成加号. 把每个点位置为横坐标,高度 ...
- STM32时钟系统之利用 systick 定时器来实现准确的延时。
本篇文章带着大家来认识一下 STM32 的时钟系统,以及利用 systick 定时器来实现一个比较准确的延时. 我们首先从时钟说起,时钟在MCU中的作用,就好比于人类的心脏一样不可或缺.STM32 的 ...
- 洛谷 P3209 [HNOI2010] 平面图判定
链接: P3209 题意: 给出 \(T\) 张无向图 \((T\leq100)\),并给出它对应的哈密顿回路,判断每张图是否是平面图. 分析: 平面图判定问题貌似是有线性做法的,这里给出链接,不是本 ...
- SpringCloud微服务实战——搭建企业级开发框架(十):使用Nacos分布式配置中心
随着业务的发展.微服务架构的升级,服务的数量.程序的配置日益增多(各种微服务.各种服务器地址.各种参数),传统的配置文件方式和数据库的方式已无法满足开发人员对配置管理的要求: 安全性:配置跟随源代码保 ...
- 个人宽带如何开启IPv6网络访问
IPv6是大势所趋,就在前段时间湖南联通发布公告,对家庭宽带提供 IPv6 地址,不再提供 IPv4地址,那本文就介绍 个人宽带如何开启 IPv6网络访问. 湖南联通停止向普通家庭宽带用户提供公网 I ...
- Go 日常开发常备第三方库和工具
不知不觉写 Go 已经快一年了,上线了大大小小好几个项目:心态也经历了几轮变化. 因为我个人大概前五年时间写的是 Java ,中途写过一年多的 Python,所以刚接触到 Go 时的感觉如下图: 既没 ...