
Netty源码分析
源码不看怎么行
保暖大裤衩LeoLee
芜湖~~~
展开
-
Netty源码分析——ChannelHandlerContext.writeAndFlush与channel.writeAndFlush的区别
疑问在如下代码示例中,我们经常使用channel().writeAndFlush()来返回数据,同时有一个同名方法ChannelHandlerContext.writeAndFlush(),从使用上来说,两者都是将数据写回channel,但是两者有没有什么区别呢? @Override protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception { System原创 2020-12-19 22:46:38 · 3331 阅读 · 1 评论 -
Netty源码分析——EventLoop于Channel的注册详解,以及其两者的关联关系
一个EventLoopGroup中会包含一个或者多个EventLoop 一个EventLoop在它的完整生命周期中只会与一个Thread进行绑定,该Thread在EventLoop初始化的时候被EventLoop作为属性持有 所有由EventLoop处理的各种I/O事件都会在其关联的Thread上执行(所以用时很长的业务逻辑请异步处理!其次,在执行的时候,会判断是否是当前的线程执行的任务,如果不是,则将该任务放入该EventLoop的执行器中执行,最终达到还是同一个线程执行的目录,所以是线程安全的)原创 2020-12-16 19:15:38 · 1398 阅读 · 0 评论 -
Netty源码分析——@Sharable以及handler被重复添加到pipline的分析
二刷Netty源码的时候又有了新的认识,特此记录。@Sharable是什么在我们按照Netty变成范式的编写过程中,会编写一个Handler的配置类,也就是继承ChannelInitializer抽象类,并重写initChannel方法,大致如下:package com.leolee.netty.secondExample;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelPipeline;原创 2020-12-10 17:39:59 · 957 阅读 · 0 评论 -
Netty源码分析:服务端接收请求建立连接过程、bossGroup移交socketChannel到workerGroup
概述Netty抽象出两组线程池:bossGroup(专门负责接收客户端的连接)和workerGroup(专门负责处理连接) 通常情况下bossGroup和workerGroup都是NioEventLoopGroup NioEventLoopGroup相当于一个循环组,这个组中含有多个事件循环,也就是NioEventLoop(内部使用一个一直阻塞的循环代码块——for (;;)) NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个selector,原创 2020-11-03 18:45:58 · 1090 阅读 · 5 评论 -
Netty源码分析:服务器启动源码详解
EventLoopGroup在编写Netty服务端之前,我们一定会创建两个EventLoopGroupEventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();这两个对象是Netty的核心对象,整个Netty的运作都是依赖于他们。bossGroup用于接收TCP请求,它会将接收到的请求交给workerGroup,workerGroup来真正的建原创 2020-11-02 01:16:04 · 402 阅读 · 0 评论 -
Netty源码分析:三大核心组件——ChannelPipline、ChannelHandler、ChannelHandlerContext
三者关系每当ServerSocket建立一个新的连接后,就会创建一个Socket,对应目标客户端 每当创建一个Socket将会分配一个新的ChannelPipeline 每个ChannelPipline内包含多个ChannelHandlerContext,组成一个双向链表 这些ChannelHandlerContext用来包装我们添加的ChannelHandler这是一个带有过滤器性质的责任链模式ChannelPipline提供了许多对ChannelHandler操作的方法.原创 2020-10-31 00:36:30 · 631 阅读 · 0 评论 -
Netty源码分析:ChannelFuture与Future底层解析
继承关系io.netty.channel.ChannelFuture extendsio.netty.util.concurrent.Futureextendsjava.util.concurrent.Future原创 2020-10-29 18:48:36 · 1235 阅读 · 1 评论 -
Netty源码分析:从源码入手分析理解Netty自适应缓冲区分配策略
概述当Netty与客户端建立连接后(SocketChannel建立),通道处于 OP_READ 状态(对读感兴趣),这时就需要分配一定的缓冲区(如ByteBuffer,实则为字节数组)来用于数据的读取。之前学习Java NIO:Buffer缓冲区源码详解以及“零拷贝” 的时候我们其实已经知道 NIO 中存在堆内和堆外两种缓冲,在 Netty 底层的实现过程中是怎么来做缓存分配的呢,又是怎么决定分配多大的缓冲区用于Channel的读与写呢?Netty 提供了一种“可预测性” 的分配方式来处理问题,这.原创 2020-10-19 20:40:30 · 437 阅读 · 1 评论 -
Netty设计思想:结合NIO以及Netty分析Reactor模式5大角色的调用关系
概述本篇文章承接Netty学习(7):详解《Scalable IO in Java》,认识Reactor模式继续解读Reactor模式,因为Reactor模式对于NIO和Netty的学习太重要了相关文档:【腾讯文档】Reactor经典开创论文、【腾讯文档】Scalable_IO_in_Java 本篇文章一定要结合这两个文档阅读,不要害怕读英文!!!Reactor模式的角色构成我们将从以上这个图来分析Reactor模式的角色构成(所有关于Reactor模式的文章,这张图一定会存在!原创 2020-10-25 18:08:49 · 292 阅读 · 0 评论 -
Netty设计思想:详解《Scalable IO in Java》,认识Reactor模式
Scalable IO in JavaDoug Lea编写的一篇关于Java NIO以及Reactor模式的经典文章原文已经上传在线文档:【腾讯文档】Scalable_IO_in_Java 为了更好的理解本文章,请参阅我的列一篇文章:Java NIO:在网络编程中的基本范式同时也可以关注我的相关专栏,谢谢大伙啦!!!概要 Scalable network services(可伸缩的网络服务) Event-driven processing(事件驱动处理) Rea原创 2020-10-17 15:13:30 · 752 阅读 · 1 评论