0

我对netty的FrameDecoder有如下问题。

  • 数据包被分成 {n} 帧,然后 FrameDecoder 正确处理。
  • 如果多个数据包组成一个帧并发送到服务器(当客户端连续发送小数据包数据时),则 FrameDecoder 仅读取第一个数据包。剩余的被忽略。

我可以让 FrameDecoder 继续执行剩余的数据吗?

public class BinaryFrameDecoder extends FrameDecoder {
    @Override
    protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer){
        if(buffer.readableBytes() < 2){
            return null;
        }

        int length = buffer.getShort(buffer.readerIndex());
        if(buffer.readableBytes() < length + 2){
            return null;
        }
        buffer.skipBytes(2);                
        return buffer;
    }
}
4

1 回答 1

0

如果您更换它应该可以工作:

return buffer;

和:

return buffer.readBytes(length);

因为它很可能buffer包含不止一条消息。

于 2013-04-18T18:34:01.297 回答