Netty源码
文章平均质量分 74
靛蓝忆
这个作者很懒,什么都没留下…
展开
-
Netty源码解析(一) —— nio的基本操作和reactor模型
大家都知道传统的bio(即阻塞io)的并发性能不高,原因是什么呢?ServerSocket要accept接受客户端socket是阻塞的,那么这个线程就一直被占用,这样才能保证客户端的连接都能被处理accept到客户端的socket连接之后要再开一个线程来处理读写操作,这样又一个线程被占用所以当并发访问量非常高时,服务器的线程调度数量到达峰值,就导致响应客户端性能下降那么怎么解决...原创 2018-08-22 13:59:45 · 395 阅读 · 0 评论 -
Netty源码解析(二) —— NioEventLoopGroup(boss worker线程模型)
Netty的源码里面有example,参照echo demo启动netty服务public final class EchoServer { static final boolean SSL = System.getProperty("ssl") != null; static final int PORT = Integer.parseInt(System.getPrope...原创 2018-08-22 16:01:37 · 2844 阅读 · 1 评论 -
Netty源码解析(三) —— NioEventLoop初始化
这节我们来分析NioEventLoop的代码实现,还记得上节在NioEventLoopGroup中我们创建NioEventLoop,下面先看它的继承关系 构造方法 /** * @param parent NioEventLoopGroup * @param executor 线程执行器 每次调用会创建一个name为nioEventLoopGroup-...原创 2018-08-22 17:31:03 · 804 阅读 · 0 评论 -
Netty源码解析(九) —— channel的write操作
io.netty.channel.AbstractChannel#write(java.lang.Object) @Override /** * channel的写操作 */ public ChannelFuture write(Object msg) { //调用pipline的write操作 return pip...原创 2018-08-27 17:25:11 · 2487 阅读 · 0 评论 -
Netty源码解析(四) —— NioEventLoop处理io
NioEventLoop处理io的一些操作方法io.netty.channel.nio.NioEventLoop#run /** * 启动服务 轮询selector */ @Override protected void run() { for (;;) { try { ...原创 2018-08-23 14:15:31 · 1856 阅读 · 0 评论 -
Netty源码解析(五) —— 客户端channel如何完成注册
上一篇我们拿到所有的accept到的channel之后,我们回头看事件通知 还记得io.netty.bootstrap.ServerBootstrap#init服务端启动的时候, ch.eventLoop().execute(new Runnable() { @Override pu...原创 2018-08-23 14:18:00 · 579 阅读 · 0 评论 -
Netty源码解析(六) —— 服务端channel如何完成注册
先看ServerBootstrap的继承关系 ServerBootstrap的成员变量 //worker group private volatile EventLoopGroup childGroup; //设置进来的childHandler private volatile ChannelHandler childHandler;Abstra...原创 2018-08-23 17:19:48 · 1480 阅读 · 0 评论 -
Netty源码解析(七) —— Pipeline的工作机制
Pipeline是一个由HandlerContext节点构成的双向环形链表,结构如下图,最前面是HeadContext,末尾是TailContext中间是用户自定义的HandlerContext节点 先来看pipLine的构造参数 /** * channelPipLine的默认构造方法 * @param channel */ protect...原创 2018-08-24 15:43:04 · 616 阅读 · 0 评论 -
Netty源码解析(八) —— channel的read操作
客户端channel在建立连接之后会关注read事件,那么read事件在哪触发的呢? NioEventLoop中 /** * 读事件和 accept事件都会经过这里,但是拿到的unsafe对象不同 所以后续执行的read操作也不一样 * NioServerChannel进行accept操作 ...原创 2018-08-25 14:41:47 · 20689 阅读 · 1 评论