Netty入门概念

Netty基于NIO/NIO2异步事件,意在降低网络组件与业务逻辑耦合度,简化网络编程提升性能。

相关概念

ChannelHandler:事件处理单元。

Channel:I/O操作接口。

SocketChannel

SocketChannel代表一个tcp连接,与其他服务交换数据都通过SocketChannel。

EventLoop

EventLoop是一个循环,一直在寻找新事件,如:Socket请求。

事件发生时被传给相应处理程序,如:ChannelHandler。

一个SocektChannel由一个EventLoop管理。

因为,一个EventLoop由一个线程构成,所以,SocketChannel实例也只能由一个线程访问,从Socket读取数据,不必担心同步问题。

注:一个SocektChannel对应一个EventLoop,一个EventLoop管理N个SocektChannel。

EventLoopGroup

EventLoopGroup是一组EventLoop,在多个Channel间共享。线程池的概念,是对jdk可调度线程池的扩展。

ChannelPipeline

每个SocketChannel都有一个ChannelPipeline。

ChannelPipeline包含一系列ChannelHandler实例。

EventLoop从一个SocketChannel读取数据时,数据传递给ChannelPipeline中第一个ChannelHandler ,ChannelHandler处理数据,然后,可选择将其转给下个ChannelHandler。

数据写入操作中,数据在写入SocketChannel前,通过ChannelPipeline进行传递。

ChannelInitializer

ChannelInitializer是一个特殊的ChannelHandler,SocketChannel创建时被附加到SocketChannel的ChannelPipeline上,以便初始化SocketChannel。

SocketChannel初始化完成后,ChannelInitializer将自己从ChannelPipeline中移除。

ChannelFuture

任务反馈机制,有别于java原生Future,处理完成时会主动通知。

Encoder与Decoder

编解码器将字节转换成消息对象(Java对象),或将消息对象转换成字节。

如:编解码器将HTTP请求中原始字节转换为HTTP对象,或将HTTP响应对象转换成原始字节。

大多编解码器都基于ByteToMessageDecoder和MessageToByteEncoder。

Netty使用ChannelInboundHandler和ChannelOutboundHandler接入编解码处理。

Netty提供多种不同协议的编解码器,如:HTTP、WebSockets、SSL / TLS等。

若在Netty中使用这些协议,需从ChannelInboundHandler和ChannelOutboundHandler接口下找到对应实现,添加到ChannelPipeline中。

Netty适用范围

Web服务器、聊天服务器、消息代理、自建传输协议的应用。