netty引导程序使用相同的工作组,但无法使用相同的线程

时间:2018-06-28 06:32:04

标签: netty

服务器:

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日志打印其IO线程为ntLoopGroup-5-1,而serverChannel处理程序read日志打印其IO线程ntLoopGroup-5-2

我希望通过使用netty共享的eventLoop,该程序可以具有较低的上下文切换率。

1 个答案:

答案 0 :(得分:0)

您可以使用acceptedChannel.eventLoop()作为传递到group(...)的{​​{1}}中的组来执行此操作。这正是我们在HexDump示例中所做的:

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