netty中的自定义FrameDecoder

时间:2013-04-18 02:44:10

标签: buffer netty

我的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;
    }
}

1 个答案:

答案 0 :(得分:0)

如果你替换它应该有效:

return buffer;

使用:

return buffer.readBytes(length);

因为buffer很可能包含多条消息。