[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GiJlgL6r-1650625844191)(//upload-images.jianshu.io/upload_images/24483793-26157847878c212c.png?imageMogr2/auto-orient/strip|imageView2/2/w/989/format/webp)]
从图中可以看出,netty主要涉及以下几个部分
- NioEventLoop:netty的核心发动机,在死循环中select OP_READ/OP_ACCEPT事件
- Channel:把NIO中SocketChannel封装成netty的NioSocketChannel(接收客户端连接后创建的channel);把NIO中ServerSocketChannel封装成netty的NioServerSocketChannel(netty server端启动时创建,绑定服务端端口);
- ByteBuf:对channel中数据进行读写
- Pipeline:把用户业务逻辑使用责任链串联起来,后面用户读写用户数据时会经过责任链中每个节点进行处理(接收到客户端连接创建NioSocketChannel时创建)
- ChannelHandler:pipeline中的节点,负责处理具体的业务逻辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L6jc65K8-1650625844206)(//upload-images.jianshu.io/upload_images/24483793-869d54d3684f1dda.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]
NioEventLoop结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-608Ygszf-1650625844209)(//upload-images.jianshu.io/upload_images/24483793-ffae32cb78fa5d86.png?imageMogr2/auto-orient/strip|imageView2/2/w/845/format/webp)]
- Group相关类:都从JDK提供的ExecutorService继承而来,因此明显是提供线程池相关的能力;在此我向大家推荐一个架构学习交流圈。交流学习伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
- Executor相关类:都从JDK提供的AbstractExecutorService继承而来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e6cSM9lh-1650625844210)(//upload-images.jianshu.io/upload_images/24483793-579e0ee7b47a18b7.png?imageMogr2/auto-orient/strip|imageView2/2/w/992/format/webp)]
- AbstractChannel:提供channel的基础功能包含unsafe/pipeline/eventLoop等
- AbstractNioChannel:增加了Nio相关功能包含SelectableChannel/SelectionKey/readInterestOp等
- AbstractNioMessageChannel:服务端channel基础类,提供服务端channel的doReadMessages/doWriteMessage抽象方法
- AbstractNioByteChannel:客户端channel基础类,提供客户端channel的doReadBytes/doWriteBytes抽象方法
- NioServerSocketChannel:服务端channel具体类,主要个性化的重写各个父类提供的抽象方法
- NioSocketChannel:客户端channel具体类,主要个性化的重写各个父类提供的抽象方法
- Unsafe相关类:Channel ~> AbstractChannel ~> AbstractNioChannel ~> AbstractNioByteChannel ~> NioSocketChannel 中分别有一个对应的内部类 Unsafe ~> AbstractUnsafe ~> AbstractNioUnsafe ~> NioByteUnsafe ~> NioSocketChannelUnsafe;Channel的IO *** 作都是委托给Unsafe,例如:read/write/bind/register/close等等
- NioServerSocketChannel和NioSocketChannel几点区别:
- 向父类注册的事件不同,NioServerSocketChannel是accept, NioSocketChannel是read
- NioServerSocketChannel的read *** 作是指读取一条连接,NioSocketChannel是指读取IO数据
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)