Netty MessageToMessageCodec 解码方法仅接收 512byte 大块响应

Netty MessageToMessageCodec decode method receives only 512byte chunk of large response

我正在从事 Apache PLC4X 项目,我们在该项目中使用 Netty 实现工业 PLC 协议。一旦响应的大小超过 512 字节的限制,我们目前就会遇到解码响应的问题。

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

如何正确处理这个问题?

您应该在此处使用 ByteToMessageDecoder,这样您就可以 buffer 数据。有关如何存档的更多详细信息,请参阅 javadoc。但基本上是这样的:

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