Различные ответные сообщения объединяются при чтении с сервера netty - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть клиентское приложение netty. Это приложение подключается к порту и получает ответ TCP. Когда я читаю respose под нагрузкой, некоторые ответные сообщения объединяются. Мои сообщения с запросами и ответами имеют уникальный ключ транзакции. Я слежу за этим по своей бизнес-логике;

Факт: 000010690013200000101PMAX 567F 0000000000 1554092081842400 0 000010690013200000101PMAX 567F 0000000000 1556083801080400 0

Ожидаемое: 000010690013200000102PMAX 567F 0000000000 1554092081842400 0

Двойной ответ имеет 2 ответа, но сервер отправил только 1 ответ, который мы агрегировали при чтении

@Override
public void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf in) {
    String input = in.toString(CharsetUtil.UTF_8);
    log.info(input);
}

Как я могу решить эту проблему, и это происходит под нагрузкой.

Netty Версия: 4.1.25. Окончательный Версия Java: 64-битная виртуальная машина OpenJDK (сборка 25.161-b14, смешанный режим)

Спасибо.

1 Ответ

1 голос
/ 16 апреля 2019

Это ожидается, и только как работает TCP. TCP не имеет понятия о границах сообщений, поэтому вы можете получать байты так же, как вы их читаете (что означает, что материал может быть фрагментирован и т. Д.).

Если вам нужно сохранить какие-то границы сообщений, вам необходимо закодировать эту информацию в вашем протоколе. Например, вы можете предварительно добавить длину сообщения и затем использовать эту информацию на принимающем партнере для корректного декодирования сообщения.

Netty содержит несколько декодеров / кодеров, которые

LengthFieldPrepender

LengthFieldBasedFrameDecoder

...