Netty 的 ChannelPipeline 机制?
Netty 面试题发布于
一、定义
每个 Channel 有一个 Pipeline,由多个 ChannelHandler 组成,形成责任链。入站和出站事件在 Pipeline 中传播。
二、入站和出站
- InboundHandler:处理入站事件(读、连接建立等),从 head 向 tail 传播。
- OutboundHandler:处理出站事件(写、连接等),从 tail 向 head 传播。
三、常用 Handler
- ByteToMessageDecoder:字节解码为消息。
- MessageToByteEncoder:消息编码为字节。
- IdleStateHandler:心跳检测。
- LoggingHandler:日志。
- 自定义业务 Handler。
四、示例
ch.pipeline()
.addLast(new LengthFieldBasedFrameDecoder(...))
.addLast(new MyDecoder())
.addLast(new MyEncoder())
.addLast(new BusinessHandler());
五、注意
- Handler 处理耗时操作应放到业务线程池,避免阻塞 EventLoop。
- Handler 加 @Sharable 注解可共享,否则每次新建。