ProtoBuf(protocol buffer) 网络传输协议

来源:互联网 发布:nw.js electron 编辑:程序博客网 时间:2024/05/18 00:40

ProtoBuf(protocol buffer) 网络传输协议

转自:http://blog.csdn.net/wenyiqingnianiii/article/details/52741312

ProtoBuf是Google开源的一套二进制流网络传输协议,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、Go 和Python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

优点:传输效率快(比xml和json快10-20倍),文档型协议; 
缺点:使用不太方便;

这里简单解释一下什么是文档型协议,向我们的xml和json一般在使用的时候都需要保存一份说明文档和一个实际的java类,而protobuf在使用的时候其定义的格式就是说明文档,简单明了而且可以将其编译成各个平台的类库,以java平台为例,其编程成jar之后,若定义文件发生了变化,则在使用jar包的话就会报错,必须重新编译,这也就保证了App端与服务器端的协议统一性。

网络传输协议实践

由于ProtoBuf的传输效率和文档型协议的特性,公司产品选择了Protobuf作为网络传输协议。下面我就以一个简单的登录操作,介绍一下对ProtoBuf的实际应用。

可以看到在Protobuf中定义网络请求,分为两个部分,请求部分和应答部分,其message request定义的是请求信息,而message response定义的是应答信息。 

请求信息中的字段就是我们请求中需要传递的字段,应答信息中的字段就是App端获取的服务器端的应答信息集合。

每个字段都有修饰符,那么修饰符是做什么的呢? 
在protobuf中定义了三种修饰符,分别为:required,optional,repeated。其中:

  • required:表示的是这个字段必须要传递,不可为空;

  • optional:表示的是这个字段可传可不传,可以为空;

  • repeated:表示这个字段传递的是列表数据

在message的定义过程中,message还可以嵌套另外的message信息,比如应答信息中的UserStatus,其和java中对象的概念很类似。

(3)将proto文件编译成jar包 
这里就不在具体介绍怎么讲proto文件编译成jar了,google已经提供了相应的编译工具。

(4)在Android代码中使用 
由于我们将proto文件编译成了jar包,首先我们需要将jar引入到我们的工程,然后就可以使用了。这里简单看一下具体的使用代码。

可以发现我们在代码中直接有对应的登录请求message类,这样我们就可以直接通过java类调用了,O(∩_∩)O哈哈~。

总结:

本文主要介绍了App开发过程中常见了三种网络传输协议,以及各自的优劣势,还重点介绍了protobuf协议的使用方式等。当然了这里我还是比较推荐protobuf的。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 贴药膏后皮肤痒怎么办 贴完膏药过敏了怎么办 骨折后骨密度低怎么办 食品经营许可证过期了怎么办 40年的产权满后怎么办 五证合一后税务怎么办 互联业务登录页怎么办 vivo音量键坏了怎么办 琴岛通学生卡怎么办 云卡会员删除了怎么办 办健康证没空腹怎么办 办健康证吃饭了怎么办 发票盖了财务章怎么办 发票盖成公章了怎么办 发票上盖了公章怎么办 进京证怎么办在哪里办 去北京没进京证怎么办 单位的车怎么办进京证 房贷合同丢了怎么办 农合医疗卡丢失怎么办 手指断了怎么办能好吗? 被劳务派遣公司骗了怎么办 餐饮服务许可证过期了怎么办 中行u盾证书过期怎么办 84消毒液吸多了怎么办 八四消毒液烧手怎么办 怀孕了下身痒怎么办啊 4s店态度差怎么办 小区的卡丢了怎么办 开老板的车撞了怎么办 车后保险杠撞裂怎么办 车到期了忘了审怎么办 改过气的车费油怎么办 车内容易进灰尘怎么办 东风天龙油耗高怎么办 国六出来了国五怎么办 手动挡有7个档位怎么办 东风天锦160没劲怎么办 奇骏2.0动力不足怎么办 修汽车被师傅骂怎么办 转院证明不给开怎么办