Skip to content

Commit e746683

Browse files
committed
completed 关闭之前已经引导的客户端或服务器
1 parent 6aab4b3 commit e746683

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
关闭之前已经引导的客户端或服务器
2+
====
3+
4+
引导您的应用程序启动并运行,但是迟早你也需要关闭它。当然你可以让 JVM处理所有退出但这不会满足“优雅”的定义,是指干净地释放资源。关闭一个Netty 的应用程序并不复杂,但有几件事要记住。
5+
6+
主要是记住关闭 EventLoopGroup,将处理任何悬而未决的事件和任务并随后释放所有活动线程。这只是一种叫EventLoopGroup.shutdownGracefully()。这个调用将返回一个 Future 用来通知关闭完成。注意,shutdownGracefully()也是一个异步操作,所以你需要阻塞,直到它完成或注册一个侦听器直到返回的 Future 来通知完成。
7+
8+
清单9.9定义了“优雅地关闭”
9+
10+
Listing 9.9 Graceful shutdown
11+
12+
EventLoopGroup group = new NioEventLoopGroup() //1
13+
Bootstrap bootstrap = new Bootstrap(); //2
14+
bootstrap.group(group)
15+
.channel(NioSocketChannel.class);
16+
...
17+
...
18+
Future<?> future = group.shutdownGracefully(); //3
19+
// block until the group has shutdown
20+
future.sync();
21+
22+
1. 创建 EventLoopGroup 用于处理 I/O
23+
2. 创建一个新的 Bootstrap 并且配置他
24+
3. 最终优雅的关闭 EventLoopGroup 释放资源。这个也会关闭中当前使用的 Channel
25+
26+
或者,您可以调用 Channel.close() 显式地在所有活动管道之前调用EventLoopGroup.shutdownGracefully()。但是在所有情况下,记得关闭EventLoopGroup 本身

SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ This is the summary of my book.
6262
* [从 Channel 引导客户端](CORE FUNCTIONS/Bootstrapping clients from a Channel.md)
6363
* [在一个引导中添加多个 ChannelHandler](CORE FUNCTIONS/Adding multiple ChannelHandlers during a bootstrap.md)
6464
* [使用Netty 的 ChannelOption 和属性](CORE FUNCTIONS/Using Netty ChannelOptions and Attributes.md)
65+
* [关闭之前已经引导的客户端或服务器](CORE FUNCTIONS/Shutting down a previously bootstrapped Client or Server.md)
6566
* NETTY BY EXAMPLE
6667
* [单元测试](NETTY BY EXAMPLE/Unit Testing.md)
6768
* [WebSocket](NETTY BY EXAMPLE/WebSockets.md)

0 commit comments

Comments
 (0)