Netty MessageToMessageCodec解码方法仅接收512字节的大响应块

时间:2018-11-29 08:26:30

标签: netty chunked

我正在研究Apache PLC4X项目,我们在其中使用Netty实现行业PLC协议。当前,只要响应大小超过512字节的限制,我们就会遇到解码问题。

一旦响应的大小超过了这512个字节,我们基于MessageToMessageCodec的协议层实现的解码方法将仅接收512字节大的ByteBuf。之后,该方法将与其余数据包一起再次调用。

如何正确处理此问题?

1 个答案:

答案 0 :(得分:2)

您应在此处使用ByteToMessageDecoder,这将允许您buffer数据。有关如何将其归档的更多详细信息,请参见javadocs。但基本上它是这样的:

YourDecoder extends ByteToMessageDecoder {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
        if (in.readableBytes() < 1024) {
            return;
        }
        ....
    }
}