对于FileServer示例:
FileServerHandler将字符串消息发送到客户端,请求客户端发送要检索的文件名。
通过通道管道的msg流程如下:
但是,FileServer中指定的出站通道管道消息流是:
问题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流如下:
问题2:chunkedWriteHandler生成的数据流如何绕过StringEncoder?导致StringEncoder被跳过的原因是什么?我知道StringEncoder期望一个String来解码以写出套接字,但是chunkedWriteHandler生成的数据流如何绕过StringEncoder