NOTE
2.50 组件介绍
1. 是什么 一个异步事件驱动的网络框架,提供的api比Java原生的BIO、NIO的api好用的多,并且Netty能随意的切换NIO或者BIO的实现方式 2. 组件 2.1. Bootstrap 用于启动Netty。包含创建线程,创建socket等工作 2.2. EventLoop 是一个死循环,
这是历史学习笔记,可能存在过时或不完整的理解。
1. 是什么
一个异步事件驱动的网络框架,提供的api比Java原生的BIO、NIO的api好用的多,并且Netty能随意的切换NIO或者BIO的实现方式
2. 组件
2.1. Bootstrap
用于启动Netty。包含创建线程,创建socket等工作
2.2. EventLoop
是一个死循环,不停地监听新事件。当有一个新事件到来的时候,他会把这个事件传递给ChannelHandler处理
2.3. EventLoopGroup
EventLoop的集合
2.4. SocketChannel
代表一个tcp socket连接,由同一个EventLoop管理,而EventLoop是单线程的,所以这个SocketChannel内部的操作是单线程的,不用担心并发问题。
2.5. ChannelInitializer
是个特殊的ChannelHandler,当实例化一个SocketChannel它会被调用,实例化完SocketChannel后这个handler会从ChannelPipeline中删除‘
2.6. ChannelPipeline
每个SocketChannel都有一个ChannelPipeline–包含一堆ChannelHandler实例的列表
2.7. ChannelHandler
处理SocketChannel中的数据
3. 处理流程
首先使用Bootstrap启动netty,初始化线程等资源 然后使用EventLoop监听SocketChannel的各种事件 接着当这个SocketChannel有事件发生的时候,会交由这个SocketChannel关联的ChannelPipeline里的ChannelHandler处理。举例,创建SocketChannel的时候由ChannelInitializer处理,读写SocketChannel的时候由ChannelPipeline中的ChannelHandler处理
4. ChannelPipeline
ChannelHandler有两个子接口,ChannelInboundHandler和ChannelOutboundHandler,前者负责从SocketChannel中读取数据到Application中,后者负责把Application中的数据写出到SocketChannel中。
ChannelHandler可以看成链式调用,比如Handler1吧raw byte转成Http Object(Codecs),Handler2把Http Object转成其他类型的Object。
ChannelInboundHandler和ChannelOutboundHandler其实实在一个list中的,可以在某个ChannelInboundHandler中处理数据并直接写回到ChannelOutboundHandler中,如下

4.1. Codecs
特殊的ChannelHandler,用于转换消息格式。