Netty - framework для написания приложений, взаимодействующих по сети. Это может быть и балансировщик нагрузки, и сетевой паук, и практически любая другая архитектура, основанная на понятии client/server.
В основе лежит java.io
и java.nio
. Выбор базового механизма осуществляется путем использования конкретных реализаций ключевых компонентов. Подход к их использованию скрыт под абстракцией и интерфейсами, так что перейти от одного к другому не составит труда в отличие от того, как бы это было реализовано в Java.
Все сетевые операции асинхронны. Управление асинхронным взаимодействием осуществляется на основе событийной модели или с использованием Future объектов подобных Future объектам в Java.
Workflow типичной программы на Netty:
- Создается новый экземпляр
ChannelFactory
- фабрика, порождающая каналы - базовые сущности библиотеки. Именно они скрывают за собой особенность реализации процесса сетевого взаимодействия. По большому счету, канал - это абстракция над соединением, куда можно писать и откуда можно читать информацию. Очевдно, что реализацияChannelFactory
также отражает используемые технологии. Например, для использования java.nio используетсяNioServerSocketChannelFactory
. - Создается новый экземпляр
Bootstrap
объекта - вспомогательный класс, который упрощает процесс конфигурирования приложения. Обязательным параметром Bootstrap объекта являетсяChannelFactory
, с помощью которого приложение будет открывать новые сетевые соединения. - Задается фабрика
ChannelPipelineFactory
, которая является ключевым элементом в событийной модели Netty. Обработчики событийChannelHandler
организованы подобно обработчикам JUnit или Mockito (возможно, не совсем равноценное сравнение), т.е. каждому методу обработчика соответствует событие. Переопределяя эти методы, мы подписываемся на связанные с ними события. Netty оперирует цепочкой обработчиковChannelPipeline
, т.е. отреагировав на событие, один обработчик передает управление другому обработчику в цепочке. Реализуя фабрику pipeline’ов, мы можем определить свои обработчики в цепочке. - Второстепенная конфигурация приложения через
Bootstrap
. - Запуск сетевого приложения.
- Завершение сетевого приложения.
Netty потрясающе документирован. Его документация по-настоящему самодостаточна и понятна. Крайне рекомендую изучить примеры использования этой библиотеки в официальной документации проекта. Кстати о версиях. На данный момент, финальная версия - 3.5.2
. Последний релиз был 5го июля 2012 года. Но вместе с тем идет разработка 4ой версии Netty. К сожалению, эта версия находится в Alpha стадии и не имеет какого либо руководства пользователя. При этом, структура классов немного поменялась, поэтому просто так использовать новую версию не получится.
Исходные коды хостятся на Github. В качестве build tool используется Maven. Проект организован в виде нескольких модулей. Т.е. внутри корневого пакета io.netty
пакеты разделены на модули. Каждый модуль находится в отдельном каталоге, который реализован также ввиде maven проекта. Внутри центрального pom файла объявляются все дочерние модули:
1 2 3 4 5 6 7 8 9 10 11 12 |
|