摘要:关闭连接:本质是取消 Channel 在 Selelctor 的注册 [toc] __Netty 系列目录()__ 1. 主线分析 1.1 主线 关闭连接分两种:主动关闭(正常关闭)和被动关闭(异常关闭)。 多路复用器(Selector)接收到 OP_READ 事件 处理 OP_READ 事件:Ni
阅读全文
摘要:发送数据:自适应写和连接写同样是为了解决什么问题 [toc] __Netty 系列目录()__ 发送数据和接收数据比较类似,可以将这两部分结合起来学习。 "接收数据:自适应缓冲区和连接读是为了解决什么问题" 1. 主线分析 1.1 写数据要点 和读数据一样,写数据我们也会碰到以下问题: 1. 每次写
阅读全文
摘要:处理业务:事件是如何在 pipeline 中传播的 [toc] __Netty 系列目录()__ 在上一节 "接收数据:自适应缓冲区和连接读是为了解决什么问题" 中,我们知道 NioEventLoop 不断的轮询,接收 OP_READ 事件;然后将读取到的数据通过 pipeline.fireChan
阅读全文
摘要:接收数据:自适应缓冲区和连接读是为了解决什么问题 [toc] __Netty 系列目录()__ 到目前为止,我们已经启动服务,并接收了客户端连接,双方已经可以正式通信。下面就要处理请求:接收数据、业务处理、发送数据。 1. 主线分析 1.1 读数据技巧 接收数据我们会碰到以下问题: 1. 缓冲区大小
阅读全文
摘要:NIO 源码分析(05) Channel 源码分析 [toc] __Netty 系列目录()__ 一、Channel 类图 __功能说明:__ 提供了 Channel 响应 thread.interrupt(),支持中断操作,最重要的两个方法是 begin 和 end。 提供了 Channel 注册
阅读全文
摘要:NIO 源码分析(04) 从 SelectorProvider 看 JDK SPI 机制 [toc] __Netty 系列目录()__ SelectorProvider 定义了创建 Selector、ServerSocketChannel、SocketChannel 等方法,采用 JDK 的 Ser
阅读全文
摘要:NIO 源码分析(03) 从 BIO 到 NIO [toc] __Netty 系列目录()__ 一、NIO 三大组件 Channels、Buffers、Selectors 1.1 Channel 和 Buffer 基本上,所有的 IO 在 NIO 中都从一个 Channel 开始。Channel 有
阅读全文
摘要:NIO 源码分析(02 2) BIO 源码分析 Socket [toc] __Netty 系列目录()__ 在上一篇文章中详细分析了 ServerSocket 的源码,Socket 和 ServerSocket 一样也只是一个门面模式,真正的实现也是 SocksSocketImpl,所以关于 set
阅读全文
摘要:NIO 源码分析(02 1) BIO 源码分析 [toc] __Netty 系列目录()__ 一、BIO 最简使用姿势 __(1) JDK BIO 启动服务典型场景__ ok,代码已经完成!!!下面我们和 Linux 下的网络编程进行对比。 __(2) Linux BIO 启动服务典型场景__ 对比
阅读全文
摘要:NIO 源码分析(01) NIO 最简用法 [toc] __Netty 系列目录()__ Java NIO 主要由三个部分组成:Channel、Buffer 和 Selector。在分析源码前最好对 NIO 的基本用法和 Linux NIO 在一个基本的了解。 1. "NIO 入门" 2. "Lin
阅读全文
摘要:Linux NIO 系列(04 4) select、poll、epoll 对比 [toc] __Netty 系列目录()__ 既然 select/poll/epoll 都是 I/O 多路复用的具体的实现,之所以现在同时存在,其实他们也是不同历史时期的产物 select 出现是 1984 年在 BSD
阅读全文
摘要:Linux NIO 系列(04 3) epoll [toc] __Netty 系列目录()__ 一、why epoll 1.1 select 模型的缺点 1. 句柄限制:单个进程能够监视的文件描述符的数量存在最大限制,通常是 1024,当然可以更改数量,但由于select采用轮询的方式扫描文件描述符
阅读全文
摘要:Linux NIO 系列(04 2) poll [toc] __Netty 系列目录()__ 一、select 和 poll 比较 select() 和 poll() 系统调用的本质一样,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是 poll() 没有最大文件描述符数量的限制(但是数量
阅读全文
摘要:Linux NIO 系列(04 1) select [toc] __Netty 系列目录()__ select 系统调用的的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上可读、可写和异常等事件。 一、select 机制的优势 为什么会出现 select 模型? 先看一下下面的这句代码: i
阅读全文
摘要:Linux NIO 系列(03) 非阻塞式 IO [toc] __Netty 系列目录()__ 一、非阻塞式 IO 阻塞和非阻塞 I/O 是设备访问的两种不同模式,驱动程序可以灵活地支持这两种用户空间对设备的访问方式。 一般我们在 open() 文件或打开文件后通过 iocntl() 或 fcntl
阅读全文
摘要:Linux NIO 系列(02) 阻塞式 IO [toc] __Netty 系列目录()__ 一、环境准备 yum install y gcc nc man socket 帮助手册 "关于 Linux 下 man 手册的安装和使用点击这里" 1.1 代码演示 __(1) 编译__ [root@loc
阅读全文
摘要:netty源码分析 Recycler 对象池的设计 1. 《netty源码分析4 Recycler对象池的设计》: 2. 《Netty 对象池实践优化》: 3. 《Netty轻量级对象池实现分析》: [toc] 一、为什么需要对象池 减少创建对象时内存分配的消耗,对象的内存分配机制见: 对象进行重用
阅读全文
摘要:Netty 源码 ChannelHandler(四)编解码技术 __Netty 系列目录()__ 一、拆包与粘包问题 由于 TCP 是面向字节流的,什么意思呢:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成式一连串的无结构的字节流。TCP 并不
阅读全文
摘要:Netty 源码 ChannelHandler(三)概述 __Netty 系列目录()__ 一、ChannelInboundHandler 和 ChannelOutboundHandler Netty 中的事件分为 Inbound 事件和 Outbound 事件。 Inbound 事件通常由 IO
阅读全文
摘要:Netty 源码 Channel(二)核心类 [toc] __Netty 系列目录()__ 相关文章: "4.1 Netty 源码 Channel(一)概述" "4.2 Netty 源码 Channel(二)核心类" 1. Channel 类图 2. AbstractChannel 2.1 几个重要
阅读全文