關(guān)閉Netty之前已經(jīng)引導(dǎo)的客戶端或服務(wù)器

2018-08-03 16:43 更新

當(dāng)引導(dǎo)我們的應(yīng)用程序啟動(dòng)和運(yùn)行之后,我們也需要懂得如何關(guān)閉它。雖然您可以使用JVM來處理所有退出,但是這樣做并不能很干凈地釋放資源。如果要關(guān)閉一個(gè)Netty的應(yīng)用程序是挺簡單的,但是需要記住以下幾點(diǎn)。

主要是記住關(guān)閉 EventLoopGroup,將處理任何懸而未決的事件和任務(wù)并隨后釋放所有活動(dòng)線程。這只是一種叫EventLoopGroup.shutdownGracefully()。這個(gè)調(diào)用將返回一個(gè) Future 用來通知關(guān)閉完成。注意,shutdownGracefully()也是一個(gè)異步操作,所以你需要阻塞,直到它完成或注冊(cè)一個(gè)偵聽器直到返回的 Future 來通知完成。

清單9.9定義了“優(yōu)雅地關(guān)閉”

Listing 9.9 Graceful shutdown

EventLoopGroup group = new NioEventLoopGroup() //1
Bootstrap bootstrap = new Bootstrap(); //2
bootstrap.group(group)
    .channel(NioSocketChannel.class);
...
...
Future<?> future = group.shutdownGracefully(); //3
// block until the group has shutdown
future.sync();
  1. 創(chuàng)建 EventLoopGroup 用于處理 I/O
  2. 創(chuàng)建一個(gè)新的 Bootstrap 并且配置他
  3. 最終優(yōu)雅的關(guān)閉 EventLoopGroup 釋放資源。這個(gè)也會(huì)關(guān)閉中當(dāng)前使用的 Channel

或者,您可以調(diào)用 Channel.close() 顯式地在所有活動(dòng)管道之前調(diào)用EventLoopGroup.shutdownGracefully()。但是在所有情況下,記得關(guān)閉EventLoopGroup 本身


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)