1

を使用するプロジェクトがNettyあり、いくつかの問題があります。

connectionがしばらくアイドル状態の場合、は自動的にconnection閉じるかどうか。勝手に閉まる場合、閉まる時間をどうやって設定すればいいですか?

5 つのスレッドがあり、100 個のデータを送信します。彼らは同じチャンネルを使用します。

 /** release connect*/
    public void closeConnect(ChannelFuture writeFuture){
    if(writeFuture != null){
        writeFuture.awaitUninterruptibly();
    }
    future.getChannel().close();
    future.getChannel().getCloseFuture().awaitUninterruptibly();
    client.releaseExternalResources();
    }

    //write data
    ChannelFuture future = Channels.write(data);
    closeConnect(future);

上記のコードはcloseChannelexception. 私の質問は、どうすれば例外を回避できますか?

また、ReadTimeoutHandlerクライアントで使用し、timeout= 5 を設定し、スレッドを 6 秒間スリープさせると、その後ReadTimeoutException発生します。を呼び出すe.getChannel().close()と、closeChannelException. 自分で例外を処理したり、例外なく接続を閉じたりするにはどうすればよいですか?

4

2 に答える 2

1

ReadTimeoutExceptionAPI がそれをスローするかどうかをキャッチしてから、 closeConnect(...).

しかし、チャンネルはすでに閉鎖されているように思えます。したがって、プログラムの状態に影響する場合は、無視するCloseChannelExceptionか処理してください。

于 2012-08-17T10:17:32.960 に答える
0

この方法を試してください:

/** 接続解除 */

public void closeConnect(ChannelFuture writeFuture){
if(writeFuture != null){
    writeFuture.awaitUninterruptibly();
}
future.getChannel().getCloseFuture().awaitUninterruptibly();
future.getChannel().close().awaitUninterruptibly();
client.releaseExternalResources();
}

//write data
ChannelFuture future = Channels.write(data);
closeConnect(future);

最初に channelFuture を閉じてから、チャネル自体を閉じてみてください。

于 2013-02-08T16:08:21.057 に答える