2016-10-31 3 views
0

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

Пример:

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

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

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

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

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 

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

ответ

2

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

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