:::tips

ctx.channel().write(msg) 与 ctx.write(msg)的区别

  • 都是触发出站处理器的执行
  • ctx.channel().write(msg) 从尾部开始查找出站处理器(先跳到tail,再往前找)
  • ctx.write(msg) 是从当前节点找上一个出站处理器(直接往前找)
    ::: 出站操作和数据将由 ChannelOutboundHandler 处理。它的方法将被 Channel、Channel-Pipeline 以及 ChannelHandlerContext 调用。
    image.png
    所有由 ChannelOutboundHandler 本身所定义的方法:

  • bind(ChannelHandlerContext,SocketAddress,ChannelPromise) 当请求将 Channel 绑定到本地地址时被调用

  • connect(ChannelHandlerContext,SocketAddress,SocketAddress,ChannelPromise) 当请求将 Channel 连接到远程节点时被调用
  • disconnect(ChannelHandlerContext,ChannelPromise) 当请求将 Channel 从远程节点断开时被调用
  • close(ChannelHandlerContext,ChannelPromise) 当请求关闭 Channel 时被调用
  • deregister(ChannelHandlerContext,ChannelPromise) 当请求将 Channel 从它的 EventLoop 注销时被调用
  • read(ChannelHandlerContext) 当请求从Channel读取更多的数据时被调用
  • flush(ChannelHandlerContext) 当请求通过 Channel 将入队数据冲刷到远程节点时被调 用
  • write(ChannelHandlerContext,Object,ChannelPromise) 当请求通过 Channel 将数据写到远程节点时被调用 (**唤醒下一个出战处理器)**