Netty4入门

先从整体上看一下Netty的构成。

核心组件

Bootstrap&ServerBootstrap

netty程序的启动器,负责配置netty程序,把各个组件组合起来。通过客户端使用Bootstrap进行connect,服务器端使用ServerBootstrap进行bind。

EventLoop&EventLoopGroup

一个EventLoop其实就是一个线程,处理 Channel的IO操作.一个Channel的IO操作由一个EventLoop负责,但不是每个Channel都会有特定的EventLoop,而是由EventLoopGroup统一分配和回收。因此在EventLoop里面,万万不能阻塞。

通常ServerBootstrap会使用两个EventLoopGroup,一个用于接受客户端连接;另一个用于处理客户端的数据。

Handler

netty程序真正业务逻辑所在,Handler主要用来处理各种事件,这里的事件很广泛,比如可以是连接、数据接收、异常、数据转换等。其执行线程正是从EventLoopGroup分配的EventLoop。
Handler有ChannelInboundHandler、ChannelOutboundHandler两种,分别处理输入、输出数据。

ChannelPipeline

Channel是管道,数据在其中in或者out。而Handler则是管道中的过滤阀门,支持多个Handler,组成一个ChannelPipeline。其中机制类似Filter和FilterChain。

ChannelInitializer

ChannelInitializer便是用来配置这些Handler,它会提供一个ChannelPipeline,并把Handler加入到ChannelPipeline。

Encoders和Decoders

用于字节流和Message之间的相互转换。Netty中提供了很多现成的编码/解码器,我们一般从他们的名字中便可知道他们的用途,如ByteToMessageDecoder、MessageToByteEncoder,如专门用来处理Google Protobuf协议的ProtobufEncoder、 ProtobufDecoder。

其他

Unpooled

对象池。

TCP粘包/拆包

基于流的TCP,即read到的数据,有可能不是完整的数据包。netty提供了一系列的Decoder用于解决粘包/拆包的问题。比如特定分隔符、定长消息、长度+数据等等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容