Потоки, не выполняющиеся одновременно на UDP-сервере Netty

Код, который я анализирую, создает сервер UDP с Netty NioDatagramChannelFactory. Он создает пул потоков с:

<code>ExecutorService threadPool = Executors.newCachedThreadPool();
</code>

Затем канал дейтаграмм, pipeFactory & amp; самонастройки:

<code>int workerCount = 10;
DatagramChannelFactory datagramChannelFactory = new NioDatagramChannelFactory(threadPool, workerCount);
ChannelPipelineFactory pipelineFactory = new SNMPTrapsPipeLineFactory();

ConnectionlessBootstrap bootStrap = new ConnectionlessBootstrap(datagramChannelFactory);
bootStrap.setPipelineFactory(pipelineFactory);
bootStrap.bind(new InetSocketAddress(host, port));
</code>

В pipeFactory метод getPipeline () добавляет пользовательские обработчики.

Также как сказано в: Многопоточная обработка сообщений UDP

Есть только один поток, обрабатывающий полученные сообщения. В журналах имена потоков отображаются какNew I/O datagram worker #1 лайк:

2012-04-20 09: 20: 51,853 Новый работник дейтаграммы ввода-вывода # 1 '- -' 1 INFO [c.e.m.r.s.h.SNMPTrapsRequestHandler: 42] messageReceived | Обработка: V1TRAP [reqestID = 0, ...]

Я прочитал документацию и эту запись:Много UDP-запросов потеряно на UDP-сервере с Netty

А потом я немного изменил код в соответствии с этими записями. Теперь пул потоков создается с помощью:

<code>int corePoolSize = 5;
ExecutorService threadPool = new OrderedMemoryAwareThreadPoolExecutor(corePoolSize, 1048576, 1048576);
</code>

И конвейер фабрики с и ExecutionHandler:

<code>ExecutionHandler executionHandler = new ExecutionHandler(threadPool);
ChannelPipelineFactory pipelineFactory = new SNMPTrapsPipeLineFactory(executionHandler);
</code>

И getPipeline () добавляет обработчик, как описано:

<code>public class SNMPTrapsPipeLineFactory implements ChannelPipelineFactory {

    private ExecutionHandler executionHandler = null;

    public SNMPTrapsPipeLineFactory(ExecutionHandler executionHandler) { 
        this.executionHandler = executionHandler;
    }

    @Override
    public ChannelPipeline getPipeline() throws Exception {

        ChannelPipeline pipeline = Channels.pipeline();
        pipeline.addFirst("ExecutorHandler", executionHandler);

        // Here the custom handlers are added
        pipeline.addLast( ... )
    }
</code>

Теперь я получаю 4 разных имени потока в журналах. Они появляются какpool-2-thread-1, pool-2-thread-2, так далее...

Например:

2012-05-09 09: 12: 19,589 ИНФОРМАЦИЯ о pool-2-thread-1 [c.e.m.r.s.h.SNMPTrapsRequestHandler: 46] messageReceived | Обработка: V1TRAP [reqestID = 0, ...]

Но они не обрабатываются одновременно. Обработка в messageReceived () должна завершиться в одном потоке для следующего, чтобы обработать следующее сообщение. Я отправил на сервер кучу сообщений от разных клиентов, и журналы, которые я получаю, не переплетаются. Я также пытался Thread.sleep () внутри messageReceived (), и подтверждает предыдущее.

Я что-то пропустил? Есть ли способ добиться НАСТОЯЩЕГО многопоточного сервера UDP с Netty? Как я могу получить разные потоки для одновременного выполнения messageReceived ()?

Ответы на вопрос(2)

Ваш ответ на вопрос