在 netty 中对 LengthFieldBasedFrameDecoder 有更多的控制

Having more control on LengthFieldBasedFrameDecoder in netty

我在管道的开头添加了一个 new LengthFieldBasedFrameDecoder(64 * 1024, 0, 4),它工作得很好,但是当接收到整数(数据包的前 4 个字节,代表实际数据包的长度)时,什么也没有发生) 为负数或大于最大可能长度 64*1024

我希望 LengthFieldBasedFrameDecoder 在即将到来的数据包的大小大于 64 * 1024 或小于 1

时以某种方式通知我

我怎样才能做到这一点?

您需要编写自己的 LengthFieldBasedFrameDecoder 版本。也就是说,我们还可以添加一个受保护的方法,人们可以覆盖该方法来验证“已解析”的消息长度。这样,用户端的自定义将最少。

LengthFieldBasedFrameDecoder 发现负长度时,它会抛出 CorruptedFrameException 和相应的消息。此类异常应通过 ChannelEvent 传播到管道。所以你可以在处理程序中拦截和过滤异常。