Netty编码和解码

编码和解码的基本介绍

  1. 编写网络应用程序时,因为数据在网络中传输的都是二机制字节码数据,在发送数据时就需要编码,接收数据时就需要解码
  2. codec(编解码器)的组成有两个:decoder(解码器)和encoder(编码器)。encoder负责把业务数据转换成字节码数据,decoder负责把字节码数据转换成业务数据

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

  1. Netty自身提供了一些codec(编解码器)
  2. Netty提供的编码器
    StringEncoder,对字符串数据进行编码
    ObjectEncoder,对java对象进行编码
  3. Netty提供的解码器
    StringDecoder,对字符串数据进行解码
    ObjectDecoder,对java对象进行解码
  4. Netty本身自带的ObjectDecoder和ObjectEncoder,可以实现POJO对象或各种业务对象的编码解码,底层仍然是使用java序列化技术,而java序列化技术本身效率就不高,存在以下问题
  • 无法跨语言
  • 序列化后的体积太大,是二进制编码的5倍多
  • 序列化性能太低
    ====》 引出 醒的解决方案 【Google 的Protobuf】

Protobuf

  1. Protobuf是Google发布的开源项目,全称Google Protocol Buffers,是一种轻便搞笑的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。他很适合做数据存储或RPC数据格式交换
  2. 参考文档:https://developers.google.com/protocol-buffers/docs/proto
  3. Protobuf是以message的方式来管理数据的
  4. 支持跨语言,跨平台。
  5. 高性能,高可靠
  6. 使用protobuf编译器能自动生成代码,protobuf是将类的定义使用.proto文件进行描述,说明,在idea中编写.proto文件时,会自动提示下砸 .proto编写插件,可以让语法高亮
  7. 然后通过 protoc.exe编译器根据.proto自动生成java文件
  8. protobuf请添加图片描述

Protobuf快速入门

描述:客户端可以发送一个Studen POJO对象到服务器+(通过Protobuf编码)
服务端能够在接受Student Pojo对象,并显示信息 (通过Protobuf解码)

使用参考:https://blog.csdn.net/wei198621/article/details/108836136

protobuf传输多种类型:https://blog.csdn.net/qq_28497823/article/details/106354008

Netty入站和出站机制

  1. Netty的组件设计:Netty的主要组件有Channel,EventLoop,ChannelFuture、ChannelHandler,ChannelPipe等
  2. ChannelHandler充当了两处理入站和出站数据的应用程序逻辑的容器。例如,实现ChannelInboundHandler接口(或channelInboundHandlerAdapter),你就可以接收入站事件和数据,这些数据会被业务逻辑处理。当要给客户端发送响应时,也可以从ChannelInboundHandler冲刷数据。业务逻辑通常写在一个或多个ChannelInboudHandler中。ChannelOutboundHandler原理一样,只不过它是用来处理出站数据的
  3. ChannelPipeline提供了ChannelHandler链的容器。以客户端应用程序为例,如果事件的运动方向是从客户端到服务器,那么我们称为这些事件 使出站的,即客户端发送给服务器的数据会通过一系列ChannelOutboundHandler,并被这些Handler处理,反之成为入站
    请添加图片描述
  • 编码解码器
  1. 当Netty发送或者接收一个消息的时候,就会发生一次数据转换。入站消息会被解码;从字节转换成另一种格式(比如java对象);如果是出站消息,他会被编码成字节
  2. Netty提供一系列实用的编解码器,他们实现了ChannelInboundHandler或者ChannelOutBoundHandler接口。在这些类中,channelRead方法已经被重写了。以入站为例,对于每个从入站Channel读取的消息,这个方法会被调用。随后,他将调用 由解码器所提供的decode()方法进行解码,并将已经解码的字节转发给ChannelPipline中的下一个ChannelInboundHandler
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值