Netty - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > Java

Java В данном форуме вы сможете найти много полезной информации по платформе Java. Подробные статьи, исходные коды и конечно учебники как для новичков так и профессиональных Java разработчиков вы найдёте здесь. Если у вас есть вопрос или хотите поделится своими наработками, пожалуйста, делайте это в этой теме.

Ответ
Опции темы
Непрочитано 19.08.2012, 21:48   #1
Пользователь

Автор темы (Топик Стартер) Netty

Добрый день!

Нужна помощь в понимании этой библиотеки.

При создании сервера указываем пайплайн:



Код:
 ServerBootstrap bootstrap = new ServerBootstrap(
                new NioServerSocketChannelFactory(
                        Executors.newCachedThreadPool(),
                        Executors.newCachedThreadPool()));

        
        bootstrap.setPipelineFactory(new FactorialServerPipelineFactory());



далее в пайплайн указываются классы обрабатыаюшие как входящие(енкодер) так и исходящие(декодер) потоки байт,
а также логика обработки (хандлер):

Код:
public ChannelPipeline getPipeline() throws Exception {
        ChannelPipeline pipeline = pipeline();

        

        
        pipeline.addLast("decoder", new Decoder());
        pipeline.addLast("encoder", new Encoder());

        
        pipeline.addLast("handler", new Handler());

        return pipeline;
    }




в хандлере идет обработка и возбуждение возможных ошибок:
Код:
@Override
    public void messageReceived(
            ChannelHandlerContext ctx, MessageEvent e) {
        // Send back the received message to the remote peer.
        transferredBytes.addAndGet(((ChannelBuffer) e.getMessage()).readableBytes());
        e.getChannel().write(e.getMessage());
    }

    @Override
    public void exceptionCaught(
            ChannelHandlerContext ctx, ExceptionEvent e) {
        // Close the connection when an exception is raised.
        logger.log(
                Level.WARNING,
                "Unexpected exception from downstream.",
                e.getCause());
        e.getChannel().close();
    }




Т.е когда приходит поток байт от клиента, этот поток попадает в енкодер, там идет разделение его на отдельные
пакеты, и передаются это все в обработчик хандлер, хендлер вычисляет логику и передает пакет в декодер, а он
отправляет пакет клиенту. Так ?)

И если входящие данные зашифрованы, например blowfish`ем, то расшифровка происходит в енкодер\декодер или в хендлер?
DieorL2 вне форума Ответить с цитированием
Непрочитано 19.08.2012, 21:51   #2

По умолчанию Re: Netty

Поток байт попадает в первый обработчик, Netty не важно, Encoder это или Decoder, различия между ними только в том, что в ваш Encoder пойдет исходящий поток, а Decoder обработает только входящий поток. В своем Encoder'e вы должны обработать пакет, зашифровать, и вернуть буфер, который будет записан в канал. Decoder же, наоборот, принимает буфер, формирует из него пакет, и возвращает его на выполнение. Вот этот пакет от Decoder'а и нужно обрабатывать в Handler'e.
Camelion вне форума Отправить сообщение для Camelion с помощью ICQ Ответить с цитированием
Непрочитано 19.08.2012, 21:58   #3
Аватар для ANZO
Разработчик BDO Emu

По умолчанию Re: Netty

Чем Вам дефолтный NIO то не угодил?
ANZO вне форума Отправить сообщение для ANZO с помощью ICQ Отправить сообщение для ANZO с помощью Skype™ Ответить с цитированием
Непрочитано 19.08.2012, 22:03   #4
Пользователь

Автор темы (Топик Стартер) Re: Netty

тоесть он смотрит:
ага инкодер - посылает туда поток байтов,
- ага метод по обработки входящих байтов, обрабатываем

дальше передает байты в декодер, но там метода обработки нету, значит пропускает
шаг, и направляет в хендлер ,

и потом наоборот все 3 этапа?
DieorL2 вне форума Ответить с цитированием
Непрочитано 19.08.2012, 22:12   #5

По умолчанию Re: Netty

Нет. Возможно я не так выразился. Для Netty нет различий в Handler'ах, но есть различие в интерфейсах, которые они реализуют(ChannelUpstreamHandler или ChannelDownstreamHandler). Ваш входящий поток байтов\исходящий пакет обязательно попробует постучаться во все ChannelHandler'ы последовательно, начиная с первого. Netty пустит его не во все, естественно, только в обработчики входящих\исходящих потоков соответственно. Суть в том, что ваш Encoder должен наследоваться от обработчика исходящего потока, а Decoder, как и Handler - от обработчик входящего потока.

Допустим:
Исходящий(серверный) пакет отправлен в канал. Он попадает в Encoder, там с ним производятся все действия, шифрование, и всё такое.. На выходе из Encoder'а - массив байтов, который и записывается в канал. Всё, обработка исходящих сообщений закончена.

Пришел входящий пакет от клиента. Сперва он попадает в Decoder. Decoder проверяет, дошел ли пакет полностью, расшифровывает его, и всё такое.. на выходе из Decoder'а - готовый (клиентский) пакет. Этот пакет посылается дальше по обработчикам, и попадает в Handler, так как он в вашей очереди стоит после Decoder'а. Handler смотрит, что это ни за пакет, и соответствующим образом его обрабатывает.
Camelion вне форума Отправить сообщение для Camelion с помощью ICQ Ответить с цитированием
Непрочитано 19.08.2012, 23:00   #6
Аватар для iWord
Пользователь

По умолчанию Re: Netty

Анзо новые "кодиры" боятся всего что заложено изначально в системе , и стараются юзать уже готовые либы и фреймворки. Сейчас каждый новый выпускник С++'ник не представляет как жить без STL и Буста
__________________
iWord вне форума Отправить сообщение для iWord с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 19.08.2012, 23:15   #7
Аватар для linliss
Герой

По умолчанию Re: Netty

Цитата:
Сообщение от iWord Посмотреть сообщение
Анзо новые "кодиры" боятся всего что заложено изначально в системе , и стараются юзать уже готовые либы и фреймворки. Сейчас каждый новый выпускник С++'ник не представляет как жить без STL и Буста
оно и видно, для того, чтобы заюзать 1 класс, они тянут всю библиотеку, заместь того чтоб использовать стандартные классы и потом получается проект с 100500-ю библиотеками зависящий от них
linliss вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 20.08.2012, 00:26   #8
Аватар для Ozzy
Администратор

По умолчанию Re: Netty

Оффтоп:
Свернуть ↑Развернуть ↓
Ozzy вне форума Ответить с цитированием
Непрочитано 20.08.2012, 00:58   #9
Аватар для JavaMan

По умолчанию Re: Netty

Интересно, кто-нибудь делал бенчмарки netty vs java nio2 ? Что-то мне подсказывает, что перевес будет не в сторону сана оракла.
JavaMan вне форума Ответить с цитированием
Непрочитано 20.08.2012, 12:11   #10
Пользователь

Автор темы (Топик Стартер) Re: Netty

тестов nio 2 действительно либо пока нет, либо они малочислены и их трудно найти.
На хабре читал, что на дефолтном nio держали 512 к подключений, на нетти - 300 к с чем то.

Потом же были новости о 1 млн конектов в netty.

В любом случае приложение на нетти получается более красивым, компактным и возможностей для расширения больше.

Спасибо за ответы,будем дальше копаться...
DieorL2 вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Netcore Source (Netty) n3k0nation Java 3 03.05.2010 19:10


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 17:11. Часовой пояс GMT +3.

Вверх