Netty’s popularity continues to grow, and we’ll recall its main components, and walk along
WebSocket c Selectivity Compression as the main transport for web games, and Long-Polling is the key to saving stubborn old people.
2. • Инженер в компании Playtika
• Участник и докладчик митапов DevOWL
• Контрибьютор проекта Netty
2
Обо мне
3. 3
О чем доклад
• Разбор основных компонентов Netty
• Подходы и особенности при работе с Netty
• WebSocket основной транспорт для веб-игр
• Long-Polling как резервный транспорт для упрямых стариков
• Что такое “Selective Compression” и как она позволяет увеличить
пропускную способность
10. 10
Netty – EventLoop
• Никогда не блокируйте EventLoop !!!
Thread.sleep(), CountDownLatch.await() и другие блокирующие операции из
java.util.concurrent
• Используем отдельный EventLoop для обращения к внешним ресурсам
• Создаем метрики для мониторинга состояния EventLoop
12. 12
Netty – ChannelPipeline и ChannelHandler
• Удаляем неиспользуемые обработчики
• Выстраиваем пайплайн в логическом порядке
• Помечаем обработчики без состояния аннотацией @Shareble
• Используем ChannelHandlerContext для записи
• Добавляем в конец пайплайна обработчик ошибок
13. 13
Netty – ByteBuf
Абстракция для работы с данными (byte[], ByteBuffer)
https://en.wikipedia.org/wiki/Zero-based_numbering
14. 14
Netty – ByteBuf
• ByteBuf – это “reference-counted” объект, помним о release() и retain()
• Выставляем ResourceLeakDetector.Level в ADVANCED или PARANOID при
разработке и SIMPLE или DISABLED в продакшн
• Используем PooledByteBufAllocator по умолчанию
• Unpolled.wrappedBuffer() при работе с byte[]
15. 15
Netty – подытожим
• Используйте правильный транспорт
• Не блокируй свой EventLoop
• Держи ChannelPipeline в чистоте
• ByteBuf - я тебя породил, я тебя и убью
16. 16
Веб или браузерные игры
Игры, которые не требует установки и используют стандартные
технологии браузера или плагины.
18. 18
Обновляемся до WebSocket
• Full-Duplex коммуникация
• Одно соединение
• Легко определить разрыв соединения
• Поддерживает расширения (compression extension)
19. 19
WebSocket – минусы
• Не все браузеры поддерживают протокол
• Не все прокси поддерживают
• Нет поддержки автоматического переподключения
• К сожалению в мире много упрямых стариков
20. 20
Long-Polling - спасение для упрямых стариков
• Работает со всеми технологиях
• Поддерживается всеми балансировщиками и прокси
21. 21
Long-Polling – минусы
• Избыточность передаваемых данных
• Имитация дуплексного соединения
• Больше открытых соединений
• Нет поддержки автоматического переподключения
23. 23
“Selectivity Compression”
• Сжимаем только необходимое
• Уменьшаем расход ресурсов
• Увеличиваем пропускную способность
• Доступна в Netty c 4.1.35.Final
24. 24
Выводы
• Netty – быстро, асинхронно, производительно, но не просто
• WebSocket + “Selectivity Compression” – основной транспорт, только на
90%
• Long-Polling как резервный транспорт для оставшихся 10%
• Не бойтесь контрибьютить в open source проекты.