2017-02-15 5 views
0

を終えたことはありません:。ネッティー5.0.0 closeFuture()同期()私は現在、私は次の問題につまずいたネッティーを、使用してJavaでプログラムを書いている

私はチャンネル#closeFutureを(使用しようとするときはいつでも) "bootstrap"の実行後に.sync()を実行すると、タスクが終了せず、メインスレッドが永久にロックされます。まったく例外はスローされません。

マイ起動コード:

EventLoopGroup bossGroup = new NioEventLoopGroup(); 
EventLoopGroup workerGroup = new NioEventLoopGroup(); 
try { 
    ServerBootstrap serverBootstrap = new ServerBootstrap(); 
    serverBootstrap.group(bossGroup, workerGroup); 
    serverBootstrap.channel(NioServerSocketChannel.class); 
    serverBootstrap.childHandler(new IOLauncher()); 

    this.channel = serverBootstrap.bind(8192).sync().channel(); 

    System.out.println("Debug; closeFuture"); 
    this.channel.closeFuture().sync(); // This never finishes! 
    System.out.println("Debug; closeFuture done"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    bossGroup.shutdownGracefully(); 
    workerGroup.shutdownGracefully(); 
} 
+0

FYI:netty 5は推奨されていません。 5にあまりにも多くの時間を費やす前に、Netty 4.1に移行することを検討するかもしれません。 – Nicholas

答えて

1

意図したとおりに働いている、closeFuture()は、チャネルが閉じられたときに完了します未来です。つまり、チャンネルが閉じられていないと、未来は決して終わらず、sync()は無期限にブロックされます。

+0

これはチャネル#closeFutureを使用する必要はないということですか? – orangesnet

+0

現在どのように使用しているのかは、意図したユースケースであるため、サーバーが閉じるのを待ってシャットダウンすると、メインスレッドはクリーンアップできます。しかし、これは、ある時点で他のスレッドがシャットダウンを開始しなければならないことを意味します。 – Kiskae

0

固定されていて、全く問題はなく、私の最後に何かばかげていました。

関連する問題