随笔分类 - netty
摘要:一 源码 我fork的源码带注释 分支study 二 环境 | | 版本 | | | | | Netty | 4.1.169 | | Java | 8 | 三 Samples 1 服务端 1.1 启动类 /* * Copyright 2012 The Netty Project * * The Ne
阅读全文
摘要:有过之前对服务端bind流程的分析之后,客户端的connect流程就显得简单了 一 入口 // Bootstrap.java public ChannelFuture connect(String inetHost, int inetPort) { // 异步 return this.connect
阅读全文
摘要:研究服务端的启动流程 一 入口 // AbstractBootstrap.java /** * 异步非阻塞方法 * - 异步 比如main线程发起调用 真正的bind结果main线程并不是直接去取 而是将来真正bind成功的线程将结果回调 * - 非阻塞 比如main线程发起调用 最后真正执行bin
阅读全文
摘要:在Channel的初始化过程中会给每个Channel实例构造一个Pipeline,因此研究pipeline的入口就是构造方法 一 类图 是继承关系上看,pipeline的实现比较简单 二 JavaDoc Netty采用Reactor的线程模型,一个IO线程负责读写,至于怎么操作读写的逻辑则定义在不同
阅读全文
摘要:Netty为了提高系统的吞吐,大量使用异步线程模型 一 Demo public class FutureTest00 { public static void main(String[] args) throws InterruptedException, ExecutionException {
阅读全文
摘要:在ServerBootstrapAcceptor启用之前,此刻Reactor状态应该是 NioServerSocketChannel在IO多路复用器上关注着Accept(16)事件 pipeline中有4个handler head bossHandler ServerBootstrapAccepto
阅读全文
摘要:一 回顾几个时机点 pipeline的初始化 用户向pipeline添加ChannelInitializer辅助实例 Channel注册到复用器之后回调 1 pipeline的初始化 初始化Channel的时候触发了pipeline的初始化 // AbstractChannel.java pipel
阅读全文
摘要:一 类图关系 在Java的NIO体系中定义了ServerSocketChannel和SocketChannel Netty为了支持Reactor线程模型和异步编程,自己也实现了与Java中对应的两个实现 NioServerSocketChannel NioSocketChannel 从功能职责来看
阅读全文
摘要:在IO线程NioEventLoop中维护了一个队列实现,用于存放非IO任务,一个IO线程负责N个Channel,为了保证一个线程贯穿始终负责一个Channel的所有任务(任务执行次序有先后区分需要),因此可能IO线程自己将待执行的内容封装成异步任务,也有可能其他线程提交任务(立即执行或者定时任务)
阅读全文
摘要:前文已经了解过了NioEventLoopGroup和NioEventLoop 在Netty中是用的是Reactor线程模型(IO多路复用器+多个线程),真正处理业务流程的worker线程都是单个线程,一个线程处理多个Channel,一个Channel始终都是由特定的线程进行处理。 在这样的情况下,如
阅读全文
摘要:Netty对Selector的优化体现在两个方面 数据结构替换,数组替换hash表,轮询时直接寻址,提高查询效率 在Linux系统上分装的Selector可能存存在空轮询风险,尽量空轮询出现带来的负面影响 一 数据结构 // NioEventLoop.java NioEventLoop(NioEve
阅读全文
摘要:前言 Netty没有简单的使用线程池复用线程的方式,而是自己实现了一套EventLoopGroup管理器,管理着EventLoop。 一个Group多个线程方式保证服务器的吞吐率(每个线程负责一个Channel的整个生命周期事件,虽然单个事件效率可能下降,但是利用异步方式增加了吞吐率) 每个NioE
阅读全文
摘要:一 Demo public class FastThreadLocalTest00 { private final static FastThreadLocal<Long> v = new FastThreadLocal<Long>() { @Override protected Long init
阅读全文
摘要:一 定义 摘自源码JavaDoc /** * The {@link EventExecutorGroup} is responsible for providing the {@link EventExecutor}'s to use * via its {@link #next()} method
阅读全文
摘要:git地址 https://gitee.com/bannirui/mini-im.git 版本 springboot 2.6.3 netty 4.1.45.Final 功能 登录 认证 单点发送消息 群发消息 登出 空闲连接检测 心跳 思路 整合spring和netty生命周期 spring托管be
阅读全文