Многопортовый Netty 4.0 с разностным протоколом для каждого порта

#websocket #netty

#websocket #netty

Вопрос:

Я думаю, netty — лучшая сетевая платформа Java, которую я когда-либо знал, после прочтения и попробовать какой-нибудь образец, у меня возник вопрос:

1. Какой наилучший способ создать сетевой сервер для многопортового использования с другим протоколом с использованием netty 4.0?

Каждый сервер создает :

EventLoopGroup bossGroup = новая NioEventLoopGroup(); // (1)

Рабочая группа EventLoopGroup = новая NioEventLoopGroup();

ServerBootstrap b = новый ServerBootstrap(); // (2)

Каждый сервер, работающий внутри потока

это правильный путь?

2. Сервер Websocket

Как защитить сервер Websocket в случае перекрестного происхождения? У меня нет никаких ссылок на это

Ваша помощь очень ценится,

С уважением

BC,

Ответ №1:

Как сказал Норман, важно то, что вам нужно совместно использовать группы циклов событий, чтобы не создавать слишком много потоков. Пока вы совместно используете группы цикла событий, вы можете создавать столько ServerBootstrap групп, сколько пожелаете:

 EventLoopGroup bossGroup = new NioEventLoopGroup(numBossThreads);
EventLoopGroup workerGroup = new NioEventLoopGroup(numWorkerThreads);

ServerBootstrap sb1 = new ServerBootstrap();
sb1.group(bossGroup, workerGroup);
...
sb1.bind();

ServerBootstrap sb2 = new ServerBootstrap();
sb2.group(bossGroup, workerGroup);
...
sb2.bind();

ServerBootstrap sb3 = new ServerBootstrap();
sb3.group(bossGroup, workerGroup);
...
sb3.bind();
  

bossGroup Используется для приема входящих подключений, а workerGroup используется для обработки подключений, принятых bossGroup . Пожалуйста, проведите несколько тестов производительности и укажите оптимальные numBossThreads и numWorkerThreads .

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

1. Спасибо за ваш ответ Norman amp; Trustin, я попробую ваше предложение

2. Я не понимаю, как вы можете создать несколько серверных загрузок. Согласно образцу кода, который я вижу, после bind () вы должны сделать это: sb.bind(ПОРТ).sync().channel().closeFuture().sync(); Каждая из операций синхронизации блокируется. Итак, если вы сделаете это с одним ServerBootstrap, вы никогда не запустите другие. Чего мне не хватает?

3. у меня те же вопросы. Не могли бы вы привести пример?

4. Вам не нужно синхронизировать(). функция синхронизации () в официальных примерах предназначена для предотвращения самоотключения сервера, и сервер корректно отключается при закрытии сокета сервера.

Ответ №2:

Я бы разделил NioEventLoopGroup между ServerBootstrap для совместного использования одних и тех же потоков.