Netty 4-切片问题

Netty 4-切片问题,netty,Netty,我正在尝试使用netty 4.0.10.Final创建零拷贝应用程序。我在切片方面有问题。以下是我的解码方法: @Override protected void decode(ChannelHandlerContext chc, ByteBuf bb, List<Object> list) throws Exception { int readableBytes = bb.readableBytes(); if (readableBytes < LENGTH_O

我正在尝试使用netty 4.0.10.Final创建零拷贝应用程序。我在切片方面有问题。以下是我的解码方法:

@Override
protected void decode(ChannelHandlerContext chc, ByteBuf bb, List<Object> list) throws Exception {
    int readableBytes = bb.readableBytes();
    if (readableBytes < LENGTH_OF_HEADER) {
        LOGGER.debug("skipping bb - too few data for header: " + readableBytes);
        return;
    }

    int length = bb.getUnsignedShort(bb.readerIndex() + LENGTH_INDEX_IN_HEADER);
    LOGGER.debug("length of actual message: {}", length);

    if (readableBytes < length) {
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("skipping bb - too few data for msg: " +
                    readableBytes + " < " + length);
            LOGGER.debug("bb: " + ByteBufUtils.byteBufToHexString(bb));
        }
        return;
    }
    LOGGER.debug("whole bb: " + ByteBufUtils.byteBufToHexString(bb));
    LOGGER.debug("Protocol message received, type:{}", bb.getByte(bb.readerIndex() + 1));

    ByteBuf messageBuffer = bb.slice(bb.readerIndex(), length);
    list.add(messageBuffer);
    bb.skipBytes(length);
    bb.retain();
    LOGGER.debug("BB after slice: " + ByteBufUtils.byteBufToHexString(bb));
}
我的应用程序/netty也可以接收不完整的消息

在接收整个消息时,整个管道处理工作正常。我的管道从ServerBootstrap->ChannelInitializer->ByteToMessageDecoder->ByteToMessageDecoder->MessageToMessageDecoder开始

当消息不完整的帧到达时,会出现问题。 典型用例: -接收到的帧短于预期的消息,消息头中有长度字段 -接收到另一个帧,该帧完成未完成的消息并承载另一个未完成的消息 -创建完整消息的切片,不完整消息等待其正文的其余部分。所有三个都是ByteBuftoHextString日志 -切片被传递到下一个ChannelHandler,它也是ByteToMessageDecoder -切片bytebuf中发送的数据已更改-使用了不完整消息的字节,而不是完整消息的字节 -如果完整的消息比通常不完整的消息长,则使用剩余的完整消息字节

示例粗体-完整消息,斜体-不完整消息: 原缓冲器-01 02 03 04 05 06 07 08 09 0A 切片缓冲区-01 02 03 04 05 06 07 下一个处理程序缓冲区-08 09 0A 04 05 06 07

这只发生在第一个框架消息和不完整消息中。这两者之间的信息看起来很好

与.readSlice的结果相同。 复制数据的工作原理是复制的bytebufs中的数据不共享


有人看到错误了吗?有人能帮忙吗

我认为这在Netty 4.0.12.Final中已作为此提交的端口修复:

谢谢,用netty的版本解决了这个问题。下次我必须更仔细地检查变更记录太棒了。。。谢谢你让我知道。我必须承认,提交消息在这里也没有多大帮助