Netty - это java библиотека и АPI для написание concurrent сетевых приложений.
1. Boss потоки: создает, прослушивает соединения (bind/connect). Дальше передает управление рабочим потокам. Со стороны сервера может быть только один босс поток на один прослушиваемый сокет.
2. Worker потоки: выполняют асинхронный іnput/output.
Чистый Channel может работать только с СhannelBuffer. Для обработки других сложных объектов в Channel есть ChannelPipeLine (трубопровод), который состоит из специальных обработчиков (СhannelHandler). PipeLine имеет строгий порядок и вначале он к первому обработчику всегда приходит СhannelBuffer (байты почти в чистом виде).
В большинстве случаев Handlers используются как кодеры и декодеры:
Encoder (кодер) - конвертирует объект в СhannelBuffer или в другой тип понятный для следущего обработчика. (например ObjectEncoder конвертирует java объект в СhannelBuffer).
Decoder (декодер) - конвертирует СhannelBuffer в другой более полезный объект.

Все хендлеры деляется на две большие группы :
ChannelDownstreamHandler (outBound) - вызываются, когда сообщение идет от сервера.
ChannelUpstreamHandler (inBound) - вызываются, когда сообщение идет к серверу.

HttpServerCoder - пример duplex хендлера, который при Upstream работает как HttpRequstDecoder (преобразует ByteBuff в HttpRequest), downstream - HttpResponseEncoder (преобразует HttpResponse в ByteBuf).
Как добавлять обработчики. Имя (name) можно не указывать (имя произвольное).
ChannelPipeline p = ch.pipeline();
p.addLast(new HttpServerCodec());
p.addLast(new HttpServerHandler());
Netty:
Асинхронный ввод/вывод (неблокирующий) - основной поток не блокируется при вводе или выводе, а продолжает работать не ожидая результата (синхронизации с клиентом).
Event-driven - (событийно-ориентированный) - выполнения программы определяется событиями (сообщениями других приложений, потоков). Два основных действия прослеживается: выборка события и его обработка.
Основным и самым низким объектом в Netty является ChannelBuffer ( по которому передаются массив байтов). Более абстрактным понятием есть Сhannel.
Все методы в Сhannel делятся на две категории:
- простые атрибутные методы (синхронные), которые предоставляют информацию о текущем канале
- асинхронные методы, типа I/O операции: bind, write, disconnect. Эти методы возврщают ChannelFuture (отложенный результат)
Создание каналов соединений:
Каналы не создаются не на прямую, а через фабрики.
Фабрика каналов (TCP) требует в конструкторе два вида Thread пулов или Executors (аналог thread):Основным и самым низким объектом в Netty является ChannelBuffer ( по которому передаются массив байтов). Более абстрактным понятием есть Сhannel.
Все методы в Сhannel делятся на две категории:
- простые атрибутные методы (синхронные), которые предоставляют информацию о текущем канале
- асинхронные методы, типа I/O операции: bind, write, disconnect. Эти методы возврщают ChannelFuture (отложенный результат)
Создание каналов соединений:
Каналы не создаются не на прямую, а через фабрики.
- TCP NIO Channels: NioClientSocketChannelFactory andNioServerSocketChannelFactory
- UDP NIO Channels: NioDatagramChannelFactory
- TCP OIO Channels: OioClientSocketChannelFactory andOioServerSocketChannelFactory
- UDP OIO Channels: OioDatagramChannelFactory
1. Boss потоки: создает, прослушивает соединения (bind/connect). Дальше передает управление рабочим потокам. Со стороны сервера может быть только один босс поток на один прослушиваемый сокет.
2. Worker потоки: выполняют асинхронный іnput/output.
Чистый Channel может работать только с СhannelBuffer. Для обработки других сложных объектов в Channel есть ChannelPipeLine (трубопровод), который состоит из специальных обработчиков (СhannelHandler). PipeLine имеет строгий порядок и вначале он к первому обработчику всегда приходит СhannelBuffer (байты почти в чистом виде).
В большинстве случаев Handlers используются как кодеры и декодеры:
Encoder (кодер) - конвертирует объект в СhannelBuffer или в другой тип понятный для следущего обработчика. (например ObjectEncoder конвертирует java объект в СhannelBuffer).
Decoder (декодер) - конвертирует СhannelBuffer в другой более полезный объект.

Все хендлеры деляется на две большие группы :
ChannelDownstreamHandler (outBound) - вызываются, когда сообщение идет от сервера.
ChannelUpstreamHandler (inBound) - вызываются, когда сообщение идет к серверу.
HttpServerCoder - пример duplex хендлера, который при Upstream работает как HttpRequstDecoder (преобразует ByteBuff в HttpRequest), downstream - HttpResponseEncoder (преобразует HttpResponse в ByteBuf).
Как добавлять обработчики. Имя (name) можно не указывать (имя произвольное).
ChannelPipeline p = ch.pipeline();
p.addLast(new HttpServerCodec());
p.addLast(new HttpServerHandler());
- addAfter(String baseName, String name, ChannelHandler handler): Adds a handler to the pipeline name handler and it is placed directly after the handler named baseName.
- addBefore(String baseName, String name, ChannelHandler handler): Adds a handler to the pipeline name handler and it is placed directly before the handler named baseName.
- addFirst(String name, ChannelHandler handler): Adds a handler named name to the start of the pipeline (it becomes the first handler in the pipeline)
- addLast(String name, ChannelHandler handler): Adds a handler named name to the end of the pipeline (it becomes the last handler in the pipeline)