Я написал простой UDP-сервер, используя Netty. Сервер прослушивает один порт на определенном интерфейсе.JBoss Netty и UDP: многопоточность?
ChannelFactory factory =
new NioDatagramChannelFactory(
Executors.newCachedThreadPool());
ConnectionlessBootstrap bootstrap = new ConnectionlessBootstrap(factory);
bootstrap.getPipeline().addLast("MyHandler", new TestHandler());
bootstrap.bind(new InetSocketAddress(InetAddress.getByName("192.168.1.100"), 8080));
Я использую клиент, который отправляет на сервер много дейтаграмм UDP. Когда я просматриваю свое приложение с помощью VisualVM, я вижу, что есть только один поток (с именем New I/O worker # 1), который обрабатывает входящие сообщения. Это так, как ожидалось?
Если да, то как один поток может обрабатывать большое количество входящих сообщений? Я уже написал приложение с интеграцией Spring, которое прослушивает порт для датаграмм UDP (с использованием адаптера входящего канала UDP), и есть один поток, который прослушивает порт, но этот поток передает входящие сообщения для обработки другим потокам бассейн.
Благодаря
Разве это не то, что обрабатывается внутри Netty? –
Я признаю, что меньше знаю Нетти. Раньше я использовал удаленный JBoss, и JBoss удалял «обертывания» в одном из своих приложений java.nio. В качестве хорошей практики я предлагаю изучить основы API, прежде чем смотреть на фреймворки оболочки. Шаблон Reactor - это шаблон, который не используется только в nio, но также и в других средах и API (а не только Java). Я думаю, что предоставленная статья даст вам хорошее начало, а затем, если вы хотите «облегчить свою жизнь» с Netty - пойдите для этого :) –