FrameDecoder使用一个ChannelBuffer实例(字段累积)将所有Channel的原始数据求和,然后传递给解码。有时通道A的整个帧(应用程序级帧)的数据的一部分写入累积,然后通道B的整个帧的数据的一部分写入累积。据我了解,累积应使用ChannelLocal为不同的Channel存储不同的实例,以避免这种情况。情况确实存在还是我理解的代码错误?

最佳答案

您应该为每个新连接(通道)使用扩展FrameDecoder的类的新实例。对于未标记@Sharable [1]注释的所有ChannelHandler都是如此。

[1] http://netty.io/docs/stable/api/org/jboss/netty/channel/ChannelHandler.Sharable.html

09-28 07:01