Netty 源码分析--ChannelPipeline 通过前面的两章我们分析了客户端和服务端的流程代码,其中在初始化 Channel 的时候一定会看到一个 ChannelPipeline.所以在 Netty 每个 Channel 中有且仅有一个 ChannelPipeline. 比如我们来看 NioSocketChannel 的构造器初始化流程是 NioSocketChannel -> AbstractNioByteChannel -> AbstractNioChannel -> Ab…
我在前面说过了server的启动,差不多可以看到netty nio主要的东西包括了:nioEventLoop,nioMessageUnsafe,channelPipeline,channelHandler等.比较绕的就是handler的顺序:head---->tail,这个也是netty链式管理复杂的地方.这里再说下accept如何接受客户端的connect请求(connect请求跟server启动分析差不多,我就不说了). 入口就在nioEventLoop中: private static v…
BootStrap在netty的应用程序中负责引导服务器和客户端.netty包含了两种不同类型的引导: 1. 使用服务器的ServerBootStrap,用于接受客户端的连接以及为已接受的连接创建子通道. 2. 用于客户端的BootStrap,不接受新的连接,并且是在父通道类完成一些操作. 一般服务端的代码如下所示: SimpleServer.java /** * Created by chenhao on 2019/9/4. */ public final class SimpleServer…
上一篇粗略的介绍了一下netty,本篇将详细介绍Netty的服务器的启动过程. ServerBootstrap 看过上篇事例的人,可以知道ServerBootstrap是Netty服务端启动中扮演着一个重要的角色. 它是Netty提供的一个服务端引导类,继承自AbstractBootstrap. ServerBootstrap主要包括两部分:bossGroup和workerGroup.其中bossGroup主要用于绑定端口,接收来自客户端的请求,接收到请求之后,就会把这些请求交给workGrou…
本文接着前两篇文章来讲,主要讲服务端类剩下的部分,我们还是来先看看服务端的代码 /** * Created by chenhao on 2019/9/4. */ public final class SimpleServer { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGro…
前言 上一篇文章,我们对 Netty做了一个基本的概述,知道什么是Netty以及Netty的简单应用. Netty 源码分析系列(一)Netty 概述 本篇文章我们就来说说Netty的架构设计,解密高并发之道.学习一个框架之前,我们首先要弄懂它的设计原理,然后再进行深层次的分析. 接下来我们从三个方面来分析 Netty 的架构设计. Selector 模型 Java NIO 是基于 Selector 模型来实现非阻塞的 I/O.Netty 底层是基于 Java NIO 实现的,因此也使用了 Se…
如果你对netty的reactor线程不了解,建议先看下上一篇文章netty源码分析之揭开reactor线程的面纱(一),这里再把reactor中的三个步骤的图贴一下 reactor线程 我们已经了解到netty reactor线程的第一步是轮询出注册在selector上面的IO事件(select),那么接下来就要处理这些IO事件(process selected keys),本篇文章我们将一起来探讨netty处理IO事件的细节 我们进入到reactor线程的 run 方法,找到处理IO事件的代…
前两节我们分别看了FastThreadLocal和ThreadLocal的源码分析,并且在第八节的时候讲到了处理一个客户端的接入请求,一个客户端是接入进来的,是怎么注册到多路复用器上的.那么这一节我们来一起看下客户端接入完成之后,是怎么实现读写操作的?我们自己想一下,应该就是为刚刚读取的数据分配一块缓冲区,然后把channel中的信息写入到缓冲区中,然后传入到各个handler链上,分别进行处理.那Netty是怎么去分配一块缓冲区的呢?这个就涉及到了Netty的内存模型. 当然,我们在第一节的时…
本文首发于微信公众号[猿灯塔],转载引用请说明出处 接下来的时间灯塔君持续更新Netty系列一共九篇 Netty源码解析(一):开始 当前:Netty 源码解析(二): Netty 的 Channel Netty 源码解析(三): Netty 的 Future 和 Promise Netty 源码解析(四): Netty 的 ChannelPipeline Netty 源码解析(五): Netty 的线程池分析 Netty 源码解析(六): Channel 的 register 操作 Netty…
Netty源码分析第一章:Netty启动流程   第三节:服务端channel初始化 回顾上一小节的initAndRegister()方法: final ChannelFuture initAndRegister() { Channel channel = null; try { //创建channel channel = channelFactory.newChannel(); //初始化channel init(channel); } catch (Throwable t) { //忽略非关…