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

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

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

Как было бы правильно справиться с этим?


person Christofer Dutz    schedule 29.11.2018    source источник


Ответы (1)


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

YourDecoder extends ByteToMessageDecoder {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
        if (in.readableBytes() < 1024) {
            return;
        }
        ....
    }
}
person Norman Maurer    schedule 29.11.2018
comment
Большое спасибо за эту информацию ... вы определенно сделали мой день! Работал как шарм, и настройка самого нижнего уровня протокола была очень простой. - person Christofer Dutz; 29.11.2018