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 注解可共享,否则每次新建。