使用Protobuf.js构建接口

protobuf是很常用的二进制数据交换格式,那么在JavaScript项目中又该怎样去使用呢。

要使用protobuf进行数据交换,必须经过编码和解码两个过程。编码过程在服务器端进行,而客户端接受到数据之后进行解码。

因此,服务端和客户端将会共享protobuf的数据结构定义文件.proto。如何在两边的代码仓库同步这一定义文件,相信大家都有自己的方法。

光有.proto文件,还没法在JavaScript中直接使用。protobuf.js提供了pbjs和pbts两个命令行工具可以将.proto文件转译为JavaScript模块。

将所有定义文件放在同一文件夹,那么如果在JavaScript中使用,使用以下命令转译

pbjs -t json-module -w commonjs ./proto/*.proto > ./proto/index.js

该命令直接生成CommonJS格式的模块,可以直接使用NodeJS引入。

如果是在TypeScript中使用,则可以用下面的命令

pbjs -t json-module -w es6 ./src/proto/*.proto > ./src/proto/index.js && pbjs -t static-module ./src/proto/*.proto | pbts -o ./src/proto/index.d.ts –

该命令先使用pbjs转译出JavaScript模块(ES Module格式,可以直接导入或使用Webpack),再使用pbts从static-module输出中提取类型。

在项目中直接引入转译结果就可以进行编解码了。

题外话

如果要使用浮点数类型的数据,推荐使用double而不是float类型,否则,在编解码过程中可能由于精度不足导致数据产生偏差。

“使用Protobuf.js构建接口”的一个回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注