Protobuf 数据传输实例

本文通过实例展示了如何在Spring Boot应用中使用Protobuf进行数据传输,强调了其在压缩和效率上的优势。内容包括设置Content-Type首部、客户端POST数据、protobuf文件定义、服务器端和客户端代码实现,以及比较了protobuf与JSON传输数据的长度差异,证明了protobuf在数据传输效率上的提升。
摘要由CSDN通过智能技术生成

Content-Type 首部

MIME-TYPE multipurpose internet mail extension 多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。Http报文中,Content-type首部就是用来说明实体主体的MIME类型,它的值就是标准化的MIME-TYPE。对于spring-boot,当你在controller中使用@RequestBody时,相当于默认了Content-type: application/json,当然你也可以按照字符串来读取body中的内容。

从客户端向服务端 POST 数据

我们以 Spring-Boot 为服务器端开发框架,接收由客户端发送的二进制流数据时,可以100%利用protobuf的压缩特性,高效的进行数据传输,如果把编译后的二进制流嵌入JSON中传输,那就失去了protobuf进行数据序列化的意义。下面我们通过 Spring-Boot,编写一个 Controller, 模拟网关对于各种 content-type 的处理,来理解 Protobuf 的神奇之处。

定义protobuf文件

syntax = "proto3";
message Result{
    string id = 1;
    string title = 2;
    string content = 3;
}

服务器端代码

在Spring-Boot的服务器端,我们既可以使用inputStream来接收包含protobuf的post请求,也可以直接按string来接收请求。实际上,客户端都是将数据按照protobuf规则编译成为byte-array,所以客户端在http header 中添加的content-type并不会对后台的数据处理造成影响。

import com.cso.localhazrd.demo.domain.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值