Метод декодирования Netty MessageToMessageCodec получает только 512-байтовый фрагмент большого ответа - PullRequest
0 голосов
/ 29 ноября 2018

Я работаю над проектом Apache PLC4X, в котором мы реализуем промышленные протоколы PLC с использованием Netty.В настоящее время мы сталкиваемся с проблемой декодирования ответов, как только их размер превышает ограничение в 512 байт.

Как только размер ответа превышает эти 512 байт, метод декодирования нашей реализации уровня протокола на основе MessageToMessageCodec получает только 512-байтовый большой ByteBuf.Сразу после этого метод вызывается снова с остальной частью пакета.

Как правильно будет это обработать?

1 Ответ

0 голосов
/ 29 ноября 2018

Вы должны использовать ByteToMessageDecoder здесь, что позволит вам buffer данных.См. Javadocs для более подробной информации о том, как вы можете заархивировать это.Но в основном это что-то вроде:

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