当前位置:首页 > 服务端 > Netty编解码方案之Protobuf介绍

Netty编解码方案之Protobuf介绍

2022年11月06日 09:01:51服务端8

  本文我们来给大家介绍下Netty中对传输数据编解码的解决方案ProtoBuf

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 使用示意图

Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记

3.具体使用

1.导入依赖

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

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.6.1</version>
</dependency>

2.创建proto文件

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

Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记
直接点击即可

Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记
Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记

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

Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记

文件内容:

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文件,如下
Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记

命令:

proto.exe --java_out=. Student.proto

然后将文件拷贝到项目中

4.客户端服务器操作

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

Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记

服务端获取信息

Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记

客户端编码
Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记

客户端发送信息

Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记

5.效果演示

  分别启动服务器和客户端然后查看输出:
Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记

Netty编解码方案之Protobuf介绍 _ JavaClub全栈架构师技术笔记

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

作者:波波烤鸭
来源链接:https://blog.csdn.net/qq_38526573/article/details/103787021

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68105.html

标签: Netty
分享给朋友:

“Netty编解码方案之Protobuf介绍” 的相关文章

Springboot+Netty创建websocket客户端

原文地址:http://t.csdn.cn/TQW0Y 作者:全栈小定^.^ 来源链接:https://blog.csdn.net/dingdingdandang/article/details/124310025...

Java 200+ 面试题补充② Netty 模块

Java 200+ 面试题补充② Netty 模块

让我们每天都能看到自己的进步。老王带你打造最全的 Java 面试清单,认真把一件事做到最好。 本文是前文《Java 最常见的 200+ 面试题》的第二个补充模块,第一模块为:《Java 200+ 面试题补充 ThreadLocal 模块》。 1.Netty...

Java高并发网络编程(五)Netty应用

Java高并发网络编程(五)Netty应用

推送系统   一、系统设计             二、拆包和粘包 粘包、拆包表现形式 现在假设客户端向服务端连续发送了两个数据包...

springboot整合netty(二)

springboot整合netty(二)

目录 前言 正文 代码 1. 新建一个springboot项目,在pom文件中添加netty依赖: 2.新建netty服务 3.netty调用...

netty的设计模式

如果要阅读源码,首先就要学会基本的设计模式。 设计模式是前人总结出来的软件设计方法,有利于使代码更加简洁优雅。 了解了netty的设计模式,再去看源码,会有一种焕然大悟的感觉。 一、单例模式 单例模式是最常见的设计模式: 1、忽略反射的影响,全局只有...

java高并发实战Netty+协程(Fiber)|系列1|事件驱动模式和零拷贝

java高并发实战Netty+协程(Fiber)|系列1|事件驱动模式和零拷贝

今天开始写一些高并发实战系列。 本系列主要讲两大主流框架: Netty和Quasar(java纤程库) 先介绍netty吧,netty是业界比较成熟的高性能异步NIO框架。 简单来说,它就是对NIO2的封装,但提供了更好用,bug更少的API。 为什么ne...

netty在dubbo中的应用

netty在dubbo中的应用

netty在dubbo中的应用 dubbo的底层通信是利用netty来实现的,出于好奇是如何实现的,把发现的过程记录一下。 首先down下来dubbo的源码,里面包含一个模块dubbo-demo,包含了dubbo-demo-provider和dubbo-demo-co...

netty系列之:使用netty实现支持http2的服务器

netty系列之:使用netty实现支持http2的服务器

文章目录 简介 基本流程 CleartextHttp2ServerUpgradeHandler Http2ConnectionHandler 总结 简介...

netty消息服务器,netty系列之:netty初探

netty消息服务器,netty系列之:netty初探

简介 我们常用浏览器来访问web页面得到相关的信息,通常来说使用的都是HTTP或者HTTPS协议,这些协议的本质上都是IO,客户端的请求就是In,服务器的返回就是Out。但是在目前的协议框架中,并不能完全满足我们所有的需求。比如使用HTTP下载大文件,可能需要长...

Netty实现心跳检测机制

Netty实现心跳检测机制

1 Server端 import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。