2012-06-20 5 views
1

Я написал простой 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), и есть один поток, который прослушивает порт, но этот поток передает входящие сообщения для обработки другим потокам бассейн.

Благодаря

ответ

1

Сколько ядер у вас есть на вашей машине?

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

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

1

Я хотел бы предложить вам использовать шаблон реактора с java.nio - посмотрите на this -

+0

Разве это не то, что обрабатывается внутри Netty? –

+0

Я признаю, что меньше знаю Нетти. Раньше я использовал удаленный JBoss, и JBoss удалял «обертывания» в одном из своих приложений java.nio. В качестве хорошей практики я предлагаю изучить основы API, прежде чем смотреть на фреймворки оболочки. Шаблон Reactor - это шаблон, который не используется только в nio, но также и в других средах и API (а не только Java). Я думаю, что предоставленная статья даст вам хорошее начало, а затем, если вы хотите «облегчить свою жизнь» с Netty - пойдите для этого :) –

Смежные вопросы