FileServer示例 - 通过ChannelHandlers

时间:2016-08-04 04:25:09

标签: java networking netty

对于FileServer示例:

FileServerHandler将字符串消息发送到客户端,请求客户端发送要检索的文件名。

通过通道管道的msg流程如下:

  1. FileServerHandler
  2. StringEncoder
  3. 但是,FileServer中指定的出站通道管道消息流是:

    1. FileServerHandler
    2. chunkedWriteHandler
    3. StringEncoder
    4. 问题1:如何&为什么从FileServerHandler生成的String msg跳过chunkedWriteHandler到StringEncoder?是什么原因导致跳过ChunkedWriteHandler?这是因为ChunkedWriteHandler期望ChunkInput,因此处理程序拒绝任何不是ChunkedInput类型的msg并将其传递给下一个出站channelHandler,它将是期望String的StringEncoder。如果是这样,ChunkedWriteHandler会自动忽略String msg并使用(context.fireEventType(ev))方法将msg推送到StringEncoder

      当fileServerHandler发送文件内容时,如果本机上不允许零拷贝,则使用chunkWriteHandler,因此通过通道管道的msg流如下:

      1. FileServerHandler
      2. chunkedWriteHandler
      3. 问题2:chunkedWriteHandler生成的数据流如何绕过StringEncoder?导致StringEncoder被跳过的原因是什么?我知道StringEncoder期望一个String来解码以写出套接字,但是chunkedWriteHandler生成的数据流如何绕过StringEncoder

0 个答案:

没有答案