正文前先来一波福利推荐:

福利一:

百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。

福利二:

毕业答辩以及工作上各种答辩,平时积累了不少精品PPT,现在共享给大家,大大小小加起来有几千套,总有适合你的一款,很多是网上是下载不到。

获取方式:

微信关注 精品3分钟 ,id为 jingpin3mins,关注后回复   百万年薪架构师 ,精品收藏PPT  获取云盘链接,谢谢大家支持!

------------------------正文开始---------------------------

一、交互流程图:

总结点:

问题:一开始设置http请求中content-type 设置为默认文本格式,导致使用http传输body信息的时候必须进行base64加密才可以传输,这样会导致增加传输1/3的数据量,

解决:使用流进行写入与读取,客户端请求中使用inputStream,服务端使用outputStream,http数据格式设置application/octet-stream;

二、示例代码:

服务端:

    private static void sendProtobufObject() throws Exception {
org.chench.test.protobuf.OriginalData.Tdata.Rdata.Builder rdata = org.chench.test.protobuf.OriginalData.Tdata.Rdata.newBuilder();
rdata.setV();
rdata.setC("got doub");
rdata.setR("test");
rdata.setRS("rolen1"); org.chench.test.protobuf.OriginalData.Tdata.Builder tdata = org.chench.test.protobuf.OriginalData.Tdata.newBuilder();
tdata.setDatatype("aias");
tdata.setIdVer("An1");
tdata.setTrans("y");
tdata.setRk("uZkmGAC=");
tdata.addData(rdata); org.chench.test.protobuf.OriginalData.Tdata staff = tdata.build();
byte[] buff = staff.toByteArray(); //String source = new String(buff, "utf-8"); byte[] payload = Encrypt(buff, ""); //封装最外层数据
org.chench.test.protobuf.messages.Amsg.Builder msg = org.chench.test.protobuf.messages.Amsg.newBuilder();
msg.setContentValue("zYaIF1toXcw=");
msg.setContentId("1HEABwINCAcOAQ==");
msg.setVersionType("");
msg.setPayload(ByteString.copyFrom(payload)); URL url = new URL("http://127.0.0.1:9090/api/v1/suss_msg");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setConnectTimeout();
connection.setReadTimeout();
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type", "application/octet-stream"); //connection.connect(); // 通过连接对象获取一个输出流
OutputStream os = connection.getOutputStream();
// 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
os.write(msg.build().toByteArray()); ///msg.build().writeTo(connection.getOutputStream());
os.flush();
os.close();
int responseCode = connection.getResponseCode();// 调用此方法就不必再使用conn.connect()方法
if (responseCode == ) { }else
{ }
connection.disconnect();// 关闭连接

客户端:

public Object processRequest(HttpServletRequest request) throws Exception
{
//new BASE64Decoder().decodeBuffer(requestBody)
InputStream inputStream = request.getInputStream();
messages.Amsg msg = messages.Amsg.parseFrom(inputStream);
System.out.println("----------header-------------");
System.out.println(msg.getContentValue());
System.out.println(msg.getContentId());
System.out.println(msg.getVersionType()); System.out.println("----------payload-------------");
byte[] data = Decrypt(msg.getPayload().toByteArray(), "1234567890123456");
OriginalData.Tdata tdata = OriginalData.Tdata.parseFrom(data);
System.out.println("----------tdate:");
System.out.println(tdata.getAid());
System.out.println(tdata.getDatatype());
System.out.println(tdata.getIdVer());
System.out.println(tdata.getTrans());
System.out.println(tdata.getRk()); System.out.println("----------rdate:");
OriginalData.Tdata.Rdata rdata = tdata.getData(0);
System.out.println(rdata.getA());
System.out.println(rdata.getP());
System.out.println(rdata.getM());
System.out.println(rdata.getGJ()); return null;
}

  

Schema:

syntax = "proto3";

package msg;

option java_package = "org.chench.test.protobuf";
option java_outer_classname = "messages"; message Amsg {
string content_value = 1;
string content_id = 2; //appid
string version_type = 3; //协议类型
bytes payload = 4; //加密数据
}

  

syntax = "proto3";

package originaldata;

option java_package = "org.chench.test.protobuf";
option java_outer_classname = "OriginalData"; message Tdata {
string aid = 1;
string datatype = 2;
string hk = 3;
string id_ver = 4;
message Rdata{
int32 V = 1;
int32 oo = 2; //为区分大小写,原小写字母变为双小写
string pp = 3; }
repeated Rdata data = 5; //rdata对含数据请参考安全热更请求数据 }

  

数据传输协议protobuf的使用及案例的更多相关文章

  1. DDTP 分布式数据传输协议白皮书

    声明 本文非本人原创,主要参考文献[1]编写的阅读笔记.本博客仅发表在博客园,作者LightningStar,其他平台均为转载. 摘要 本白皮书对全球现有主要个人信息可携带权的实践模式进行梳理,分析其 ...

  2. protobuf Protocol Buffers 简介 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. 网络协议之:基于UDP的高速数据传输协议UDT

    目录 简介 UDT协议 UDT的缺点 总结 简介 简单就是美.在网络协议的世界中,TCP和UDP是建立在IP协议基础上的两个非常通用的协议.我们现在经常使用的HTTP协议就是建立在TCP协议的基础上的 ...

  4. 哈工大 计算机网络 实验二 可靠数据传输协议(停等协议与GBN协议)

    计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 可靠数据传输协议(停等协议与GBN协议) 实验目的: 本次实验的主要目的. 理解可靠数据传输的基本原理:掌握停等协议的工作原理: ...

  5. 三种通用应用层协议protobuf、thrift、avro对比,完爆xml,json,http

    原文: https://www.douban.com/note/523340109/ Google protobuf: 优点  二进制消息,性能好/效率高(空间和时间效率都很不错)     proto ...

  6. 【Canal源码分析】数据传输协议

    Canal的数据传输有两块,一块是进行binlog订阅时,binlog转换为我们所定义的Message,第二块是client与server进行TCP交互时,传输的TCP协议. 一.EntryProto ...

  7. 类似于xml的一种数据传输格式protobuf

    1.Protobuf 简介 Protocol Buffer是google 的一种数据交换的格式,已经在Github开源,目前最新版本是3.1.0.它独立于语言,独立于平台.google 提供了多种语言 ...

  8. TCP学习前的准备——可靠数据传输协议

    由于传输层所依赖的网络层是不可靠的,通过逐渐考虑实际情况不断引入新技术来实现可靠数据传输. 完全可信的信道 有比特差错的信道 新的协议功能: 1.    差错检测:检验和 2.    接收方反馈:序号 ...

  9. Socket开发框架之数据传输协议

    我在前面一篇随笔<Socket开发框架之框架设计及分析>中,介绍了整个Socket开发框架的总体思路,对各个层次的基类进行了一些总结和抽象,已达到重用.简化代码的目的.本篇继续分析其中重要 ...

随机推荐

  1. Java进阶知识13 Hibernate查询语言(HQL),本文以hibernate注解版为例讲解

    1.简单概述 1.1. 1) SQL:面向的是数据库 select * from tableName;2) HQL查询(Hibernate Query language): hibernate 提供的 ...

  2. 【csp模拟赛4】旅行计划 (travelling.cpp)--欧拉回路

    [题目描述] 小 Z 打算趁着暑假,开启他的旅行计划.但与其他同学不同的是,小 Z 旅 行时并不关心到达了哪个网红景点打了哪些卡.小 Z 更关注沿路的风光,而且 小 Z 觉得,尽管多次到达同一个地方, ...

  3. 【CUDA 基础】6.3 重叠内和执行和数据传输

    title: [CUDA 基础]6.3 重叠内和执行和数据传输 categories: - CUDA - Freshman tags: - 深度优先 - 广度优先 toc: true date: 20 ...

  4. Win10+ Clion + 树莓派 + QT进行远程qt程序开发

    环境配置 环境配置 Windows上:QT5 + CLion 硬件上:一只可联网.可ssh连接且装有QT5的树莓派 暂时还没想好... 树莓派安装qt sudo apt-get update sudo ...

  5. Python学习日记(一)——初识Python

    Python的优势 互联网公司广泛使用python来做的事一般有:自动化运维.自动化测试.大数据分析.爬虫.Web等. Python与其他语言 C和Python.Java.C#: C  语言:代码编译 ...

  6. 8.8 JQuery框架

    8.8 JQuery框架 一.JQuery是一个javascript的框架,是对javascript的一种封装. 通过JQuery可以非常方便的操作html的元素\要使用Jquery需要导入一个第三方 ...

  7. mysql数据库的索引

    什么是索引 索引就是一种优化查询的数据结构: 为什么要加索引 因为创建索引可以大大提高系统的查询性能. 怎么提高查询性能的 简单的理解:一张数据量比较大的表格如果没有添加任何索引,那我们在执行查询的时 ...

  8. js base64编码,C#解码

    JS: this.Base64 = function (str) { return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, fu ...

  9. LeetCode 328. 奇偶链表(Odd Even Linked List)

    题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O ...

  10. 用单元测试来调试SilverFish AI

    [TestFixture] public class AiTest { [Test] public void Test() { Settings.Instance.LogFolderPath = @& ...