1 go grpc-go 相关技术专栏 总入口
2 Protobuf介绍与实战 图文专栏 文章目录
本篇文章分享一下,使用protobuf作为前后端数据交换协议的样例。
测试用例说明:
- 客户端
采用go语言; - 服务器端
分别采用Java语言和Go语言进行说明。
| 1、使用protobuf的一般流程 |
| 2、通过proto文件存储数据交换协议 |
| 2.1、创建proto文件 |
创建一个文件,将文件的后缀改成proto即可。(通过什么工具无所谓)
| 2.2、编写一个helloworld级别的数据交换内容(message) |
显示指定protobuf的版本,创建数据结构
到目前为止一个简单的数据结构就定义好了。
注意
为了节省时间,上面图片里的int8就不重新截图修改了。
| 3、服务器端为Java版本的情况 |
| 3.1、生成Java版本的类库 |
服务器端用Java实现
将生成好的代码,拷贝到Java工程里正确的包路径下
| 3.2、让springboot工程增加解析protobuf协议的能力 |
增加Config文件,如下图所示:
| 3.3、设置请求协议为protobuf |
Java工程是用springboot工程;
获取到请求后,需要按照protobuf协议进行解析,就是序列化,反序列化。
这里提供了两种注解方式:
| 3.4、更新pom.xml依赖文件 |
| 4、服务器端为go版本的情况 |
服务器端获取message.pb.go的方式
服务器端代码说明
同样,如果客户端的序列化方式不满足要求,服务器就会报错。
| 5、客户端为go版本的情况 |
| 5.1、生成go版本的类库 |
客户端用go实现
| 5.2、go代码说明 |
服务器端会报下面的错误
WARN 32189 — [nio-9191-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: I/O error while reading input message; nested exception is com.google.protobuf.InvalidProtocolBufferException$InvalidWireTypeException: Protocol message tag had invalid wire type.]
下一篇文章
Protobuf 介绍与实战6:Protobuf、Json作为数据存储场景介绍(将Protobuf对象存储成文件后,为什么有些内容还是能看懂呢?



