前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Netty编解码方案之Protobuf介绍

Netty编解码方案之Protobuf介绍

作者头像
用户4919348
发布2020-01-24 10:00:14
2.2K0
发布2020-01-24 10:00:14
举报
文章被收录于专栏:波波烤鸭波波烤鸭

Protobuf介绍

1. Netty本身的编码解码的机制和问题分析

Netty 自身提供了一些 codec(编解码器)

Netty 提供的编码器 StringEncoder,对字符串数据进行编码 ObjectEncoder,对 Java 对象进行编码 … Netty 提供的解码器 StringDecoder, 对字符串数据进行解码 ObjectDecoder,对 Java 对象进行解码 … Netty 本身自带的 ObjectDecoder 和 ObjectEncoder 可以用来实现 POJO 对象或各种业务对象的编码和解码,底层使用的仍是 Java 序列化技术 , 而Java 序列化技术本身效率就不高,存在如下问题

  1. 无法跨语言
  2. 序列化后的体积太大,是二进制编码的 5 倍多。
  3. 序列化性能太低

2.Google Protobuf

Protobuf 是 Google 发布的开源项目,全称 Google Protocol Buffers,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC[远程过程调用 remote procedure call ] 数据交换格式 。 目前很多公司 http+json -> tcp+protobuf 参考文档 : https://developers.google.com/protocol-buffers/docs/proto Protobuf 是以 message 的方式来管理数据的. 支持跨平台、跨语言,即[客户端和服务器端可以是不同的语言编写的] (支持目前绝大多数语言,例如 C++、C#、Java、python 等)

高性能高可靠性 使用 protobuf 编译器能自动生成代码,Protobuf 是将类的定义使用.proto 文件进行描述。说明,在idea 中编写 .proto 文件时,会自动提示是否下载 .ptotot 编写插件. 可以让语法高亮。然后通过 protoc.exe 编译器根据.proto 自动生成.java 文件 protobuf 使用示意图

在这里插入图片描述
在这里插入图片描述

3.具体使用

1.导入依赖

??要使用protobuf 我们需要导入相关的jar文件

代码语言:javascript
复制
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.6.1</version>
</dependency>
2.创建proto文件

??创建Student.proto文件。在IEDA中会提示安装相关的插件,如下

在这里插入图片描述
在这里插入图片描述

直接点击即可

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装完成后重启idea即可,然后再看 proto类型的文件,会有对应的logo,语法也会相应的高亮。

在这里插入图片描述
在这里插入图片描述

文件内容:

代码语言:javascript
复制
syntax = "proto3";// 设置相关版本
option java_outer_classname = "StudentPojo"; // 生成的外部类名称,同时也是文件名
// protobuf 使用 message管理数据
message Student{ // 会在StudentPojo外部类生成一个内部类Student,这个是真正发送的POJO对象
    int32 id = 1;  // Student类中有一个属性 名称为id 类型为 int32 1 表示 属性序号
    string name = 2; // 2 也表是属性序号 不是值
}
3.生成对于的POJO对象

??通过proto.exe文件来生成对于的POJO文件,如下

在这里插入图片描述
在这里插入图片描述

命令:

代码语言:javascript
复制
proto.exe --java_out=. Student.proto

然后将文件拷贝到项目中

4.客户端服务器操作

??接下来我们实现一个netty的通信,发送的是一个POJO对象,然后通过protobuf来实现对应的编解码操作 服务端解码

在这里插入图片描述
在这里插入图片描述

服务端获取信息

在这里插入图片描述
在这里插入图片描述

客户端编码

在这里插入图片描述
在这里插入图片描述

客户端发送信息

在这里插入图片描述
在这里插入图片描述
5.效果演示

??分别启动服务器和客户端然后查看输出:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

客户端发送的是自定义的POJO对象的数据,通过Protobuf来编码,服务器对应的通过Protobuf来解码,实现了数据的传递。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Protobuf介绍
    • 1. Netty本身的编码解码的机制和问题分析
      • Netty 自身提供了一些 codec(编解码器)
      • 2.Google Protobuf
      • 3.具体使用
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com