Ну вообще я ставил целью изучить Netty, MongoDB и UDP-tracker протокол на примере реального приложения, а не «перебить» по производительности XBTT. Сейчас это лишь заготовка, из которой уже можно будет при желании сделать вполне себе стабильный и производительный трекер.
да, длинные операции нельзя в асинхронных обработчиках делать. Впрочем, в приведенном случае это компенсируется Executors.newCachedThreadPool(), так что будет работать, но иногда как синхронный поток-на-хэндлер сервер, а это, видимо не то, что вам хотелось. Для подобных вещей в Netty есть несколько механизмов, например ExecutionHandler. Можно еще и чанковый ридер прикрутить, но это несколько сложнее.
в Netty воркеры так и берутся из пула, из того, что передается в ChannelFactory. Документация вроде рекомендует cores*2, хотя конечно, это дело разработчика, сколько дать воркеров.
Скажите, а почему вы не использовали encoder и decoder, а «парсите» пакет прям хендлере?
Ещё «Получение сообщений от клиентов.» сделал копи паст в свой tcp проект, и он не коррекно обрабатывает пакеты. Если юзер подключается и посылает 1 пакет и отключается всё норм, но если к примеру придёт больше 1 пакета они не коррекно обрабатываются.
Пишем простой UDP BitTorrent-трекер на Netty + MongoDB