netty bootstrap использует ту же рабочую группу, но не может использовать тот же поток - PullRequest
0 голосов
/ 28 июня 2018

Сервер:

EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup(8);
try {
     ServerBootstrap b = new ServerBootstrap();
     b.option(ChannelOption.SO_BACKLOG, 1024);
     b.group(bossGroup, workerGroup)
       .channel(NioServerSocketChannel.class)

Клиент:

    Bootstrap b = new Bootstrap();
    b.group(workerGroup)
        .channel(NioSocketChannel.class)
    ...
    clientChannel = b.connect(host, port);

Когда обработчик канала сервера read пакета, он отправляет запрос на другой сервер через clientChannel, cleintChannel.writeAndFlush(msg->newMsg());

Однако, как я и ожидал, обработчик clientChannel read log печатает свой поток ввода-вывода ntLoopGroup-5-1, а обработчик serverChannel read log печатает свой поток ввода-вывода ntLoopGroup-5-2.

Я надеялся, что при использовании netty shared eventLoop у программы может быть более низкая скорость переключения контекста.

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете сделать это, используя acceptedChannel.eventLoop() в качестве группы, которая передается в group(...) из Bootstrap. Это именно то, что мы делаем в нашем примере HexDump:

https://github.com/netty/netty/blob/netty-4.1.25.Final/example/src/main/java/io/netty/example/proxy/HexDumpProxyFrontendHandler.java#L47

...