Рабочая группа против обработчика потока в Netty - PullRequest
0 голосов
/ 24 мая 2019

Я настраиваю Netty Server для приема нескольких входящих клиентских подключений, которые, в свою очередь, будут выполнять некоторую обработку, но запутались в группе потоков wroker против потоков обработчиков

Я попытался назначить 10 рабочих потоков и 20 обработчиковпотоки, как показано ниже.

EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup(10);
EventExecutorGroup handlerThread = new DefaultEventExecutorGroup(20);

try {
    ServerBootstrap serverBootstrap = new ServerBootstrap();
    serverBootstrap.group(bossGroup, workerGroup);
    serverBootstrap.channel(NioServerSocketChannel.class);
    serverBootstrap.localAddress(new 
    InetSocketAddress(hostName,Integer.parseInt(port)));

    // initialize a new child handler for incoming request
    logger.debug("Incoming request from TCP client...assigning a new Server Handler");
    serverBootstrap.childHandler(new ChannelInitializer<SocketChannel>() {
    protected void initChannel(SocketChannel socketChannel) throws Exception 
    {
    socketChannel.pipeline().addLast(handlerThread,new NettyServerHandler());
                }
            });
            ChannelFuture channelFuture = serverBootstrap.bind().sync();
            channelFuture.channel().closeFuture().sync();

        } catch (Exception e) {
            logger.error("Unable to initialize TCP Server");
        } 

Я не могу понять разницу между задачей рабочей группы и созданием нового обработчика сервера.Насколько я понимаю, пул потоков обработчика будет назначен каждому экземпляру NettyServerHandler .Но тогда какова роль создания пула рабочих групп из 10 потоков?

1 Ответ

0 голосов
/ 25 мая 2019

Вам не нужно создавать EventLoopGroup с 10 потоками для принятия 10 клиентов. Достаточно передать один поток на bossGroup и ни одного на workerGroup:

EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();

Убедитесь, что ServerBootstrap().childOption(ChannelOption.SO_BACKLOG, 10); установлен как минимум 10 для приема 10 клиентов.

Итак, роль EventLoopGroup - это принятие клиентов, насколько я знаю. С другой стороны, ServerHandler предназначен для получения данных и управления тем, что с ними делать, и вы можете перехватить их, если кто-то присоединился, или возникнут какие-либо проблемы с соединением, переопределив методы ChannelHandlerAdapter.

Надеюсь, я понял вашу проблему и помог вам понять ее,

С уважением

...