Flutter 中使用Protobuf姿势

Protobuf是google 的一种数据交换的格式,它独立于语言,独立于平台,简单说就是后台、安卓、IOS、PC各端都可以使用这种格式来通信

ProtoBuf 是google团队开发的用于高效存储和读取结构化数据的工具。XML、JSON 也可以用来存储此类结构化数据,但是使用ProtoBuf表示的数据能更加高效,并且将数据压缩得更小。

优点

protobuf优点就是传输效率快(据说在数据量大的时候,传输效率比xml和json快10-20倍),序列化后体积相比Json和XML很小,支持跨平台多语言,消息格式升级和兼容性还不错,序列化反序列化速度很快。

缺点:

json缺点就是传输效率也不是特别高(比xml快,但比protobuf要慢很多)。
xml缺点就是效率不高,资源消耗过大。
protobuf缺点个人觉得使用不太方便。

原理

ProtoBuf 是通过ProtoBuf编译器将与编程语言无关的特有的 .proto 后缀的数据结构文件编译成各个编程语言(Java,C/C++,Python)专用的类文件,然后通过Google提供的各个编程语言的支持库lib即可调用API。(关于proto结构体怎么编写,可自行查阅文档)

一、使用背景

都知道PB的优点是速度快,体积小,更高效,而我们项目原生已经替换了两个版本,Flutter 侧要也必须要完成适配,否则后台如果是PB格式返回的接口,就只能使用原生,不能使用Flutter去请求了,这个就需要Android、IOS端各自开发。如果Flutter 也完成适配,就不需要原生实现,直接Flutter 侧完成即可。

二、环境安装

目前整个项目Flutter侧基本是我一个人在负责,所以使用PB,必须要把环境搭建好,否则有问题出现就来不及了。

这个环境安装其实耗费了不少心思。。。。

1.首先安装protobuf
brew install protobuf

执行这个命名后,我一直卡在 Homebrew update... 然后不动,一两小时候,出现报错

error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL

解决方案:

Mac 执行brew install ...一直卡在Updating Homebrew的解决方案

# 1\. 编辑配置文件
vim ~/.bash_profile

# 2\. 文件内新增一行
export HOMEBREW_NO_AUTO_UPDATE=true

# 3\. 重新加载配置文件
source ~/.bash_profile
2.安装dart
brew tap dart-lang/dart
brew install dart

这个过程报错:Error: Failed to download resource "dart"
Download failed: https://storage.googleapis.com/dart-archive/channels/stable/release/2.10.4/sdk/dartsdk-macos-x64-release.zip

解决方案:
方案1:翻墙(我是用的这个) 这个zip 体积比较大158MB
方案2:可参考这个 先手动下载 放到brew缓存,再次执行该命令行:
a.浏览器访问上面的zip文件,下载完毕后
brew --cache
控制台显示地址为:

/Users/zhouhao/Library/Caches/Homebrew

b.最后将下载下来的文件 拷贝到 上面缓存地址:

cp ~/Downloads/dartsdk-macos-x64-release.zip /Users/yourusername/Library/Caches/Homebrew

c.接着再执行命令就可以正常安装成功

brew install dart

不清楚可以看看这个链接:
https://www.cnblogs.com/lmyupupblogs/p/12785753.html
PS : 如果上面的不行,我建议重启下,执行,还是不行,我就遇到一次,直接解压刚下载的压缩包,然后dart-sdk /bin 这个 全路径 配置到 .bash_profile中。配置环境变量
然后命令行输入dart 就可以了

3.安装protoc_plugin

dart 安装好后,就可以使用pub命令

pub global activate protoc_plugin

将protoc-gen-dart添加到path ,在用户根目录:.bash_profile添加 ,安装好后,就有protoc-gen-dart 命令了。

export "$PATH:$PWD/.pub-cache/bin"

按照上面的Vim .bash_profile 配置进环境变量 ,然后执行source .bash_profile 生效。整个环境就安装完毕。

三、proto文件转换为dart文件

执行如下 报错:

$ protoc --dart_out=. /Users/XXX/Desktop/Flutte开发资料/pb文件/Adversity.proto 

/Users/XXX/Desktop/Flutte开发资料/pb文件/Adversity.proto: File does not reside within any path specified using --proto_path (or -I).  You must specify a --proto_path which encompasses this file.  Note that the proto_path must be an exact prefix of the .proto file names -- protoc is too dumb to figure out when two paths (e.g. absolute and relative) are equivalent (it's harder than you think).

报错说没找到 我的.proto文件 需要加上 --proto_path (or -I).
然后我再次执行:

protoc --dart_out=. /Users/xxx/Desktop/Flutte开发资料/pb文件/Adversity.prot -I /Users/xxx/Desktop/Flutte开发资料/pb文件

解释下上面这个命令,我也捣鼓了一会才搞清楚:
protoc : 命令标记
--dart_out=. :生成dart 文件到当前执行命令的路径 因为是 . 想生成到其他位置自己调整;
/Users/xxx/Desktop/Flutte开发资料/pb文件/Adversity.proto
:需要转换为dart文件的 .proto 源文件路径
-I /Users/xxx/Desktop/Flutte开发资料/pb文件
:-I 就是要指定的类型 源文件的上层文件夹

执行上述命令,会生成以下文件:


image.png

上面几个文件 不一定全部需要

到这里,几乎全部介绍Flutter中使用protobuf的文章都到此为止。截止到12月10日,我搜索了至少50篇博客,每一个一个写了flutter 中到底怎么用protobuf.

!!!!!!!具体使用请看下面这篇文章!!!!!!!!!

传送门:https://www.jianshu.com/p/5952bdc36496

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容