网站首页 > 开源技术 正文
简介
在上一篇文章中,我们已经了解了protobuf是什么,还有proto文件该如何编写
如还未阅读,可点击指引前往阅读
在本文中,将着重讲讲protobuf该怎么用
Protobuf使用教程
Protobuf是一种高效数据序列化协议,可支持多种编程语言,不同编程语言使用方法或略有差异、或有多种方法,以下主要介绍大致的、通用的使用方法
安装编译器
使用protobuf前,需先安装其编译器—protoc(下载地址可看文末)
进入项目下载界面,根据自己的系统选择下载合适的版本,如喜欢也可下载源码自行构建
接着将其解压目录中的bin目录配置到系统环境变量内,方便全局使用
配置成功后,可以在命令行窗口(win+R调出)输入protoc --version查看protoc版本,验证是否配置成功
编译Proto
.proto文件并不能直接使用,我们需要将其编译成对应编程语言的序列化工具代码,从而进行使用
这一步,我们需要使用上方安装的protoc对.proto文件进行编译,protoc是一个命令行工具,主要使用步骤就是在命令行中通过命令调用protoc对目标进行编译
具体protoc的命令,可在命令行中,通过protoc --help命令,获取其部分命令解释,主要关注如下内容:
- -IPATH或--proto_path可简写为-I,等号后接一个路径,表示模块搜索路径,可以有多个
- 当你的.proto文件比较庞大,并且在里面有import导入其它proto文件,此时就可以用该命令指定导入文件所在目录,告诉编译器该去哪搜索这些文件
- --**_out形式的命令参数表示需要生成的目标语言源码,等号后接一个路径,表示生成文件保存的目录,**表示支持生成的编程语言
举个例子
假设我们有个名为example.proto的结构文件,大致如下:
在当前目录打开命令行,输入如下命令:
命令表示将example.proto编译为python代码,输出目录为.(即当前目录)
命令运行完成后,会在当前目录生成一个example_pb2.py的文件,我们可在python程序内使用它对我们的消息进行序列化和反序列化
再举个例子
我们运行protoc --version后,可以看到命令参数里支持生成的语言并没有js,如果我们想生成js文件怎么办
首先,protoc是可以生成js代码的,之所以前面的不支持,是由于一些高版本的protoc把部分编程语言的支持分化出来,单独作为插件存在,需要可自行安装搭配
可以降低protoc的版本,一些较低的版本是支持--js_out的(高版本将其分化出来成插件了)
如果不想降低版本
如果有npm,可全局安装protoc-gen-js
如果无npm,可以到protobuf-javascript项目地址手动下载js的编译器包并解压到本地,然后通过--plugin指定插件名及插件路径使用;如不想使用--plugin指定,也可直接将解压内容整个拖前面protoc的目录下
也可以使用一些第三方工具,如protobufjs-cli、protobufjs
解决js支持后,即可使用下列代码生成js版本的序列化库
上面的命令会将example.proto编译为js内可用的序列化工具代码,风格为commonjs(即使用require导入)
注意:目前尚未实现对ES6样式导入的支持。可以通过使用Browserify、webpack、Closure Compiler 或类似工具来进一步解析以支持浏览器
开始使用
生成好目标环境的编译文件后,我们即可在项目内使用protobuf来提高我们的消息传输效率
Python示例
大致代码如下:
- 其中,example_pb2为之前example.proto编译后的产物
- 经过测试,上面的数据stu序列化后的二进制数据大小大概为84字节,而相同数据的json格式大小为210字节
在使用上方生成的example_pb2时,我们会发现,生成的代码基本不可读,使用过程代码也没有丝毫智能提示,需要自己参照proto文件才知道需导入该Student,而具体的序列化函数还得看使用文档
我们打开example_pb2.py文件,如下:
- 不难看出,代码可读性是比较差的
通过官方的protoc生成的python格式代码可读性是比较差的,可能比较适合一些保密需求高或小型项目,如果我们希望提高代码可读性,可以使用betterproto生成代码
- 首先,需要安装betterproto,使用pip安装
- 着使用其重新编译proto文件
- 命令运行成功后,会在当前目录生成一个example.py文件,内容大致如下:
- 可以看出,代码可读性变好了很多,并且拥有更好的编写体验,大致使用代码如下:
Nodejs示例
大致代码如下:
以上主要举例了两种使用方法,更多的使用方法可自行探索
protoc下载地址:https://github.com/protocolbuffers/protobuf/releases
protoc编译js文档:https://protobuf.dev/protobuf-javascript/
protoc编译js插件下载地址:https://github.com/protocolbuffers/protobuf-javascript/releases
- 上一篇: 一文读懂微前端架构(微前端的原理)
- 下一篇: 聊聊动效设计(动效设计是什么)
猜你喜欢
- 2024-10-16 一文读懂微前端架构(微前端的原理)
- 2024-10-16 我对Vue.use() 的简单理解(vue中的use)
- 2024-10-16 一致性、模块化、高性能的 JavaScript 实用工具库
- 2024-10-16 前端开发十大最常用的ES6特性(前端开发十大最常用的es6特性是什么)
- 2024-10-16 觉得momentJS太笨重,来试试这个库吧
- 2024-10-16 想在线看电影就变的越来越难 优秀开源在线BT免费开源播放器
- 2024-10-16 宇宙厂:如何找到未使用 JS/CSS 并移除?
- 2024-10-16 一个前端的“自我成长”话题(前端如何提升自己)
- 2024-10-16 Facebook发布React v16.0,新旧浏览器都可以尝鲜!
- 2024-10-16 【黄金圆环】在研发领域的实践分享
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)