Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages. You can even update your data structure without breaking deployed programs that are compiled against the "old" format.
前言
最近,由于公司最左股市行情系统,需要用到socket进行前后端数据交互,涉及到 protobuf 数据格式的解析;之前使用的数据交互格式大多都是json,没接触过protobuf这种类型,所以经常查阅相关的资料,进行相关的尝试,最终解析了相关信息,现记录下实践的过程。
一、protobuf介绍
二、protobuf编译
一开始后端提供了一些 .proto 结尾的文件,打开 Snapshot.proto 文件看下内容:
对于前端来说,无需了解里面的内容,但需要编译成 js 文件调用,主要是调用编译后的方法。
1.下载protobuf编译器
下载地址
用来编译proto为JS文件方便调用
2.配置环境变量
将下载的文件地址添加到path即可,这样就可以在全局运行命令
三、项目实践
1.用vue-cli构建一个vue工程目录
2.安装插件
3.在src目录下新建一个proto目录,用来存放*.proto文件,并将写好的proto文件拷贝进去。
4.将*.proto文件生成src/proto/proto.js
在 package.json 文件配置好指令
直接执行npm run proto 指令,即可在proto文件夹下生成 Snapshot.proto 文件对应的Snapshot_pb.js 文件,在页面组件中引入即可调用。
5.前后端通过 socket 数据通信
首先,需要引入两个包
建立连接,订阅主题
通过后端接收到的如下数据:
引入proto编译好的js文件,调用Snapshot_pb.js文件中的deserializeBinary方法进行反序列编码,因为传入参数需要base64数据格式,所以先进行base64编码,再反序列化。
最后,将解析完成的数据进行页面数据渲染、展示。