Дефрагментация Netty для клиентских сообщений различной длины

77
9

У меня возникают проблемы с фрагментацией данных нетти. Мой сервер принимает соединение с клиентом. Клиент отправляет разные типы сообщений. Тезисы сообщений указывают длину полезной нагрузки в первых двух байтах.

Пример:

Message 1
[00 21][21 bytes of payload]

Message 2
[00 25][23 bytes of payload]

Message 1
[00 80][80 bytes of payload]

Я могу сказать, что мне не хватает сообщений, потому что сообщения нумеруются последовательно. Ниже описано, как полезная нагрузка обрабатывается после обработки:

Count:1,Messnger:John Doe1, Message:"I can tell you something";
Count:1,Messnger:John Doe2, Message:"What do you have to tell me";
Count:1,Messnger:John Doe3, Message:"Always be reading and teaching";

Так скажите, если клиент отправляет 5 сообщений:

Message 1
Message 2
Message 3
Message 4
Message 5

В моем чтении и обработке я пропускаю некоторые сообщения. Я только говорю

Message 1
Message 2
Message 4

Я не уверен, почему, но я думаю, что сообщения могут быть фрагментированы

спросил(а) 2021-01-25T19:34:43+03:00 4 месяца, 2 недели назад
1
Решение
77

Похоже, может возникнуть проблема в том, как вы обрабатываете сообщения. Очень возможно, что вы получаете частичные сообщения или даже несколько сообщений в одном channelRead.

Я предлагаю посмотреть в файл LengthFieldBasedFrameDecoder и добавить это до вашего ServerHandler. Это должно помочь упростить обработку сообщений для вас.

ответил(а) 2021-01-25T19:34:43+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема