随笔分类 -  Netty与NIO

摘要:Selector是NIO中的可选择Channel(SelectableChannel)的multiplexor。有两个拗口的概念,首先是SelectableChannel,在NIO里并非所有的Channel都是可选择的,必须继承SelectableChannel的Channel才可以注册到Selec 阅读全文
posted @ 2019-05-27 11:00 AshOfTime 阅读(182) 评论(0) 推荐(0)
摘要:概述 对于一个请求,可能会需要很多的处理逻辑,如果把所有的处理逻辑都放在一个ChannelHandler中,那么代码会十分的臃肿,因此需要把逻辑放在不同的ChannelHandler中实现面向对象的单一职责原则。Netty使用责任链模式把负责不同逻辑的ChannelHandler组合在一起,Chan 阅读全文
posted @ 2019-05-21 22:57 AshOfTime 阅读(417) 评论(0) 推荐(0)
摘要:Channel可以理解为铁轨,Buffer是铁轨上的火车。铁轨的两端连接这文件描述符或者说文件的缓冲区和程序运行时的内存。借助NIO是一种更加符合OS底层文件系统的调用方式,使用NIO可以用更小的开销实现IO服务。 Channel Channel是一个接口,但是接口里的方法非常的少,只有和打开关闭有 阅读全文
posted @ 2019-05-20 20:42 AshOfTime 阅读(360) 评论(0) 推荐(0)
摘要:ByteBuf是顶层的抽象类,定义了用于传输数据的ByteBuf需要的方法和属性。 AbstractByteBuf 直接继承ByteBuf,一些公共属性和方法的公共逻辑会在这里定义。例如虽然不同性质的ByteBuf底层实现不同如堆Buffer和直接Buffer,但在进行数据写入的时候都要检查并移动r 阅读全文
posted @ 2019-05-20 17:07 AshOfTime 阅读(217) 评论(0) 推荐(0)
摘要:ServerBootStrap 服务端的辅助启动类,使用Builder模式隐藏了多个构造器的参数。 EventLoopGroup Reactor线程池。EventLoopGroup是EventLoop数组,EventLoop负责轮询所有注册到Selector上的channel。 绑定Channel 阅读全文
posted @ 2019-05-16 11:08 AshOfTime 阅读(231) 评论(0) 推荐(0)
摘要:Unix中5种IO模型 就网络通信而言,一次数据读入可以分为两个阶段,首先等待数据从网络中到达,到达后需要复制到内核的缓冲区中,第二个阶段是从内核的缓冲区复制到进程的缓冲区,复制到进程的缓冲区才算读取完毕。推广到所有IO,一次完整的IO读入分为两个阶段 等待数据准备完毕 把准备好的数据读到进程的内存 阅读全文
posted @ 2019-05-06 15:18 AshOfTime 阅读(343) 评论(0) 推荐(0)
摘要:2.1 传统的BIO编程 以服务器为例,在传统BIO模型下的服务器,每当一个新的请求到来的时候回分配一个线程去处理该请求,并且该线程在执行IO操作的时候会一直阻塞,知道IO操作完成或抛出异常才会返回。当网络情况不佳时,网络IO可能会耗费大量时间,那么就会同时有大量线程在服务器上阻塞着,很容易造成内存 阅读全文
posted @ 2019-05-03 19:56 AshOfTime 阅读(134) 评论(0) 推荐(0)