ProtoBuf(protocol buffer) 网络传输协议

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中使用protobuf进行大文件传输的方法是通过将结构化数据进行序列化和反序列化来实现。首先,我们需要在.proto文件中定义数据结构。然后,使用protoc编译器生成相应的接口代码。接下来,我们可以使用这些接口代码来进行数据的序列化和反序列化操作。 为了进行大文件传输,我们可以将文件分割成较小的块,并将每个块进行序列化和传输。在接收端,我们可以将接收到的块进行反序列化,并将它们合并成完整的文件。 在C++中,我们可以使用protobuf提供的接口代码来实现序列化和反序列化操作。例如,我们可以使用SerializeToString()函数将数据序列化为字符串,然后使用ParseFromString()函数将字符串反序列化为数据对象。 在进行大文件传输时,我们还需要考虑数据的分块和传输的方式。可以使用网络传输协议(如TCP或UDP)将数据块传输到目标位置。在接收端,我们可以按照相同的方式接收数据块,并将它们合并成完整的文件。 需要注意的是,在使用C++ Protocol Buffer库之前,我们需要执行GOOGLE_PROTOBUF_VERIFY_VERSION宏来验证库的版本兼容性。在程序结束时,我们还需要调用ShutdownProtobufLibrary()函数来清理所有由Protocol Buffer库分配的全局对象。 更多关于protobuf在C++中的使用方法和优化技巧,可以参考ProtoBuf官方文档中的相关教程和参考链接。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [protobuf协议原理及实现,基于c++](https://blog.csdn.net/weixin_42700740/article/details/126954520)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ProtoBuf在中C++使用介绍](https://blog.csdn.net/weixin_44498318/article/details/115357316)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值