Я работаю над новым сервером сокетов 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 моего старого приложения, оно больше не сможет работать...
Надеюсь, это ясно .. Спасибо за вашу помощь.