Изменение поведения размера IoBuffer со старой версии

Я работаю над новым сервером сокетов TCP и беру пример старого кода, который я написал несколько лет назад для сокет-сервера UDP. В моей предыдущей работе я проверял CRC как первое действие в messageReceived(), а затем обрабатывал тип сообщения, чтобы перенаправить его на хороший сервис. Поскольку я могу получать сообщения разного размера, очень удобно, чтобы размер IoBuffer соответствовал точному размеру полученного сообщения. Я всегда могу найти контрольную сумму в конце сообщения.

Но в моем новом проекте IoBuffer по умолчанию всегда равен 2048o. Я пытался понять, какой вариант я использовал в старом проекте, пока не увидел, что поведение Mina 2.0.9 отличается от поведения 2.0.4.

Я сделал несколько тестов и увидел, что:

  • TCP и версия 2.0.4: iobuffer имеет фиксированный размер = 2048
  • UDP и версия 2.0.4: iobuffer имеет размер сообщения
  • TCP и версия 2.0.9: iobuffer имеет фиксированный размер = 2048
  • UDP и версия 2.0.9: iobuffer имеет фиксированный размер = 2048

Сообщение журнала с моим старым приложением с Mina 2.0.4

16:44:31.800 [NioDatagramAcceptor-1] INFO  log1 - RECEIVED: HeapBuffer[pos=0 lim=4 cap=**4**: 61 7A 64 0A]

То же самое, но просто измените версию Mina на 2.0.9.

16:47:40.890 [NioDatagramAcceptor-1] INFO  log1 - RECEIVED: HeapBuffer[pos=0 lim=4 cap=**2048**: 61 7A 64 0A]

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

Плохо то, что если я захочу обновить версию Mina моего старого приложения, оно больше не сможет работать...

Надеюсь, это ясно .. Спасибо за вашу помощь.


person FabGre    schedule 18.12.2015    source источник


Ответы (1)


Вы можете определить размер приемного буфера в DatagramConnector.getSessionConfig().setReceiveBufferSize. Просто установите его на то, что вы хотите, чтобы это было.

person Johnny V    schedule 07.08.2016