netty的NIO和相关概念

1.netty中的NIO

NIO1.0是JDK1.4的时候提出来的,简单的说就是selector或是epoll。

NIO2.0是JDK1.7的时候提出来的,简单的说就是AIO,由JDK底层和操作系统完成所有的io操作,包括从从系统内核读取到用户进程

netty4.x使用的是NIO1.0,是通过多路复用实现非阻塞的。

2.netty作为服务器与传统的tomcat+servlet的区别

tomcat是http协议族的web容器,netty可以自定义协议,可以说是高度定制,适用于更多的协议,例如webSocket等,其实tomcat也支持webSocket,netty是JDK原生的api进行封装,可以说是一个框架,tomcat也支持nio。

3.netty中重要的相关概念

netty中的相关概念也可以说是jdk中NIO1.0中的相关概念。

1)ByteBuff

JDK中的ByteBuffer不是很灵活,netty中对应的为ByteBuf,替代了传统BIO中流的概念,将传统bio流的概念取代了,以缓存来代替,具体的理解待续

2)Channel和Unsafe

关于channel在JDK中是java.nio.ScocketChannel和java.nio.ServerSocketChannel,

先从channel说起,netty同样实现了自己的channel接口,而且使用了Unsafe内部类加强,

对于服务器来说,channel有父和子分别,NIOServerSocketChannel为父channel,负责监听新的连接,连接接入成功后,初始化一个NIOScocketChannel,每一个连接对应唯一一个实例化的NIOScocketChannel。

3)channelPipeline和channelHandler以及channelHandlerContext

channel会有一个唯一的channelPipeline与之对应,channelHandler相当于servlet中的filter的作用,可以对该channel的事件进行处理,一个channelHandler对应一个唯一的channelHandlerContext,主要是辅助传递事件的,而我们需要实现的业务逻辑主要是通过自定义channelHandler来实现的。关于解码编码都是通过channelHandler实现的

4)eventLoop和eventLoopGroup

netty使用到了reactor线程模型,主线程组负责接入新的连接,从线程组负责处理channel中发生的事件,一个eventLoop线程可以处理多个channel的事件,而且netty保证了每次都是同一个线程处理之前的channel的事件,即channel基本上是没有跨线程的。

总结,有了以上的基本概念的理解,可以看懂netty的demo,这种方式与传统的tomcat+servlet有很大区别的,web容器tomcat会把http请求的过程封装成request和response对象。

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值