Хотя у MINA и Netty одинаковые амбиции, на практике они совершенно разные, и вам следует тщательно обдумать свой выбор. Нам повезло, что у нас был большой опыт работы с MINA и у нас было время поиграть с Нетти. Нам особенно понравился более чистый API и намного лучшая документация. Производительность тоже казалась лучше на бумаге. Что еще более важно, мы знали, что Трастин Ли будет готов ответить на любые наши вопросы, и он, безусловно, сделал это.
Мы нашли все проще в Нетти. Период. В то время как мы пытались реализовать ту же функциональность, что у нас уже была в MINA, мы сделали это с нуля. Следуя превосходной документации и примерам, мы получили больше функциональности в гораздо меньшем количестве кода.
Netty Pipeline работал лучше для нас. Это как-то проще, чем MINA, где все является обработчиком, и вам решать, обрабатывать ли восходящие события, нисходящие события, оба или потреблять больше низкоуровневых вещей. Погибать байты в «переигрывающих» декодерах было почти удовольствием. Было также очень приятно иметь возможность легко перенастроить конвейер на лету.
Но звездной привлекательностью Netty, imho, является возможность создавать конвейерные обработчики с «охватом одного». Вы, вероятно, уже читали об этой аннотации покрытия уже в документации, но по сути она дает вам состояние в одной строке кода. Без суеты, карт сеансов, синхронизации и тому подобного мы просто могли объявлять обычные переменные (скажем, «имя пользователя») и использовать их.
Но затем мы натолкнулись на контрольно-пропускной пункт. У нас уже был многопротокольный сервер под MINA, в котором наш протокол приложений работал по TCP / IP, HTTP и UDP. Когда мы переключились на Netty, мы добавили SSL и HTTPS в список за считанные минуты! Пока все хорошо, но когда дело дошло до UDP, мы поняли, что поскользнулись. MINA была очень милой с нами тем, что мы можем рассматривать UDP как «подключенный» протокол. Под Нетти нет такой абстракции. UDP не имеет соединения, и Netty рассматривает его как таковой. Netty раскрывает большую часть UDP-соединения без установления соединения на более низком уровне, чем MINA. Есть некоторые вещи, которые вы можете сделать с UDP под Netty, чем с высокоуровневой абстракцией, которую обеспечивает MINA, но на которую мы опирались.
Не так просто добавить «подключенную UDP» оболочку или что-то в этом роде. Учитывая нехватку времени и совет Трастина, что лучший способ продолжить - это внедрить в Netty нашего собственного транспортного провайдера, который не будет быстрым, в конце концов нам пришлось отказаться от Netty.
Итак, внимательно посмотрите на различия между ними и быстро перейдите к этапу, на котором вы можете протестировать любую хитрую функциональность, работающую как положено. Если вы удовлетворены тем, что Нетти выполнит эту работу, то я без колебаний согласился бы с MINA. Если вы переходите с MINA на Netty, то же самое применимо, но стоит отметить, что два API-интерфейса действительно существенно различаются, и вы должны рассмотреть возможность виртуального переписывания для Netty - вы не пожалеете об этом!