Использование EventLoopGroup в Netty с несколькими каналами

#java #netty #event-loop

#java #netty #цикл событий

Вопрос:

Я новичок в Netty, но, к сожалению, похоже, что для новичка нет подробной документации / руководства.

У меня есть несколько потоков, каждый из которых создает отдельные клиенты для подключения к отдельным каналам, используя NettyChannelBuilder . Идея заключается в том, что каждый канал будет отправлять и получать разные сообщения на / с разных хостов. Например. это выглядит так:

 class MyServiceClass{
  void executeTasks() {
      ...
      //here multiple tasks are executed in a for loop
      executorService.execute(new Task(new Client());
      ...
  }
}

class Client {
  ..
  void connect() {
      channel = NettyChannelBuilder.forAddress(host, port).build();
  }
}
 

В этом случае у каждой задачи есть свой собственный клиент, и клиенты создают свои собственные каналы для получения сообщений.

Должен ли я создать один EventLoopGroup в executeTasks и передать его клиентам для использования при создании их канала. Если это так, в чем преимущество использования EventLoopGroup ? Что именно он делает в фоновом режиме?

Ответ №1:

Я не уверен, о чем вы спрашиваете. EventLoopGroups — это просто группировка потоков, используемых для netty. Используя netty, ваши клиенты будут находиться в EventLoopGroup и будут назначаться потокам в циклическом порядке, поэтому некоторые из них могут находиться в одном потоке.

Лично я считаю, что документы отличные, но это определенно не фреймворк, предназначенный для начинающих.

Комментарии:

1. Спасибо за ответ. Я обновил вопрос примером. Надеюсь, теперь это более понятно.

2. NettyChannelBuilder находится в пакете grpc, а не в пакете netty, я мало что знаю о grpc, похоже, они обрабатывают создание цикла событий для вас. Я бы не стал беспокоиться о передаче цикла событий, пока вам не понадобится дополнительный контроль над ним.