netty codec部分剖析

针对netty 3.2进行剖析

今天用到了netty的encoder和decoder(coder其本质还是handler),特剖析一个netty提供的coder,从而选择或者实现我自己的coder。

1. 为什么要进行encoder和decoder?

众所周知,网络传输的是字节流,而我们面向对象编程操作都是对象或者基本数据类型,因此在传输前需要将对象或基本类型转换为字节;而在接收到

后又要将字节转换为对象或基本类型。同时,对于netty是基于nio的框架,而nio相对应oio的一个显著特点就是传输是基于缓冲的(buffer),故在netty中传输前:对象-->channelBuffer,接收后:channelBuffer-->对象。netty的所有coder实现都是基于这个准则进行的。

2. coder包结构:

可以看出netty已经实现了好多中不同类型的coder,用来支持不同的类型或协议。

3. 下面对org.jboss.netty.handler.codec.serialization包中的ObjectEncoder和ObjectDecoder进行剖析:

可以看到ObjectEncoder类的encoder()方法:

  @Override
79      protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception {
80          ChannelBufferOutputStream bout =
81              new ChannelBufferOutputStream(dynamicBuffer(
82                      estimatedLength, ctx.getChannel().getConfig().getBufferFactory()));
83          bout.write(LENGTH_PLACEHOLDER);
84          ObjectOutputStream oout = new CompactObjectOutputStream(bout);
85          oout.writeObject(msg);
86          oout.flush();
87          oout.close();
88
89          ChannelBuffer encoded = bout.buffer();
90          encoded.setInt(0, encoded.writerIndex() - 4);
91          return encoded;
92      }

跟进去看CompactObjectOutputStram类的writeObject()方法,其实就是使用了java自身提供的序列化机制ObjectOutputStream类的writerObject()方法。

而ObjectDecoder类的decode()方法,也是基于java的对象序列化原则进行的,略。

netty codec部分剖析

时间: 2024-11-01 16:07:19

netty codec部分剖析的相关文章

下载-深入浅出Netty源码剖析、Netty实战高性能分布式RPC、NIO+Netty5各种RPC架构实战演练三部曲视频教程

下载-深入浅出Netty源码剖析.Netty实战高性能分布式RPC.NIO+Netty5各种RPC架构实战演练三部曲视频教程 第一部分:入浅出Netty源码剖析 第二部分:Netty实战高性能分布式RPC 第三部分:NIO+Netty5各种RPC架构实战演练

深入浅出Netty源码剖析

课程目录:任务1:课程版权声明任务2: Netty源码剖析简介任务3: Netty服务器的构建任务4: Netty客户端的构建任务5: Netty客户端实现接服务器收响应数据任务6: Netty线程模型任务7: NettyServerBootstrap启动的详细过程类图分析任务8: NioEventLoop如何开启和处理channel的Accept事件任务9: NioEventLoop接收客户端请求过程任务10: NioEventLoop接收channelread事件剖析任务11: 读半包处理分

Netty源码剖析与实战

课程目录:01.课程介绍02.内容综述03.揭开Netty面纱04.为什么舍近求远:不直接用JDKNIO?05.为什么孤注一掷:独选Netty?06.Netty的前尘往事07.Netty的现状与趋势08.Netty怎么切换三种I-O模式?09.源码剖析:Netty对I-O模式的支持10.Netty如何支持三种Reactor?11.源码剖析:Netty对Reactor的支持12.TCP粘包-半包Netty全搞定13.源码剖析:Netty对处理粘包-半包的支持14.常用的“二次”编解码方式15.源码

Netty启动流程剖析

编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo.Rocketmq.Hadoop等,针对高性能RPC,一般都是基于Netty来构建,比如soft-bolt.总之一句话,Java小伙伴们需要且有必要学会使用Netty并理解其实现原理. 关于Netty的入门讲解可参考:Netty 入门,这一篇文章就够了 Netty的启动流程(ServerBootstrap),就是创建NioEventLoopGroup(内部可能包

一篇文章,读懂Netty的高性能架构之道

一篇文章,读懂Netty的高性能架构之道 Netty是由JBOSS提供的一个java开源框架,是一个高性能.异步事件驱动的NIO框架,它提供了对TCP.UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果. 作为当前最流行的NIO框架,Netty在互联网领域.大数据分布式计算领域.游戏行业.通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty的NIO框

Netty简单应用与线上服务器部署_netty视频

Netty简单应用与线上服务器部署 课程学习地址:http://www.xuetuwuyou.com/course/198 课程出自学途无忧网:http://www.xuetuwuyou.com 一.开发环境 4.1.11.Final   jdk1.8 maven 3.2 Spring 4.3.9 二.适合人群 ①想深入学习java ClassLoader ②想在线上linux服务器上运行netty或Springboot服务 三.课程目标 ①掌控ClassLoader ②学会编写shell脚本

netty Architectural Overview --reference

reference from:http://docs.jboss.org/netty/3.1/guide/html/architecture.html 2.1. Rich Buffer Data Structure 2.2. Universal Asynchronous I/O API 2.3. Event Model based on the Interceptor Chain Pattern 2.4. Advanced Components for More Rapid Developmen

一起学Netty(九)之LengthFieldBasedFrameDecoder

之前介绍了Netty天然的几种解析器,也稍微介绍了一下ByteToMessageDecoder类,我们对Netty的解码器还是有了一定的了解~ 今天要介绍的是Netty中一个很重要的解码器,因为相比于其他的普通的解码器,这个解码器用的场景更多,并不是说其他解码器不重要,只是因为我们业务场景所致 在当今比较流行的水平拆分的架构之下,RPC协议很是流行,这样可以使各个项目解耦,使得更加灵活,每个项目之间通过远程调用交互,相互之间定义一个通讯私有协议,然后解析,这样就可以进行数据接口交互 例如我们定义

一起学Netty(十)之 Netty使用Google的ProtoBuf

protobuf是由Google开发的一套对数据结构进行序列化的方法,可用做通信协议,数据存储格式,等等.其特点是不限语言.不限平台.扩展性强 Netty也提供了对Protobuf的天然支持,我们今天就写一个简单的示例,简单地了解一下Netty对Google的protoBuf的支持 我们的示例场景很简单的:客户端发送一个信息,这个信息用Protobuf来做序列化,然后服务器端接收这个信息,解码,读取信息 protobuf与xml,json这样的数据格式一样,都有自己的一套语法,且语法很简单,很容