2017-01-06 3 views
1

Я нахожусь в середине обучения Netty и начал некоторые уроки, используя весеннюю загрузку. Моя цель - создать приложение, которое настраивает порт tcp для приема сообщений и представляет их поверх ави.Netty closeFuture(). Sync(). Channel(); block rest api

Большинство учебников говорят, что я должен добавить что-то вроде этого

serverChannel = serverBootstrap.bind(tcpPort).sync().channel().closeFuture().sync().channel(); 

начать NETTY. Когда я это делаю, остальные сервисы, которые я реализовал, не работают. Теперь, когда я использую следующий фрагмент кода для запуска приложения:

serverChannel = serverBootstrap.bind(tcpPort).sync().channel(); 

все, кажется, работает нормально. Может ли кто-нибудь объяснить мне, что может устранить эту проблему?

Благодаря

ответ

0

Первая часть запуска сервера, 1) связывание его на TCP порт, 2) ждать для сервера, чтобы быть готовым (сокет прослушивания) 3) и возвращают соответствующий канал.

serverBootstrap.bind(tcpPort).sync().channel(); 
       (1)   (2)  (3) 

Вторая часть ждать основного канала (прослушивание сокета) для выключения (closeFuture().sync()), где closeFuture дает вам «будущее» на «закрыто» операции (значение отключения сокета сервера), и sync ожидая этого будущего. channel() возвращает вам тот же канал, что и в первый раз, за ​​исключением того, что он теперь закрыт.

Таким образом, вы можете найти этот код в другом примере, потому что, как правило, вы запускаете сервер (связывание) в основном потоке или около того, а затем, если вы не ждете чего-то, основной поток закончится, предоставив вашу JVM заканчивая, и поэтому ваш сервер останавливается сразу после запуска.

Таким образом, в общем, то, что мы делаем:

  • запустить сервер
  • добавить в трубопроводе необходимые обработчики для обработки вашего бизнес-логики (и сетевой протокол, конечно)
  • затем закончить ваш главный, ожидая на closeFuture, чтобы однажды в вашей бизнес-логике вы получили заказ на завершение работы, вы закрываете основной канал, и поэтому ваш основной поток тоже закрывается.

Смотри, например Shutdown netty programmatically

Смежные вопросы