クライアントから非同期にメッセージを送信してチャネルを閉じると、Nettyは次の例外をスローします。非同期メッセージを送信してからチャネルを閉じると、ClosedChannelExceptionが発生する
java.nio.channels.ClosedChannelException
at sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.java:133)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:324)
at org.jboss.netty.channel.socket.nio.SocketSendBufferPool$PooledSendBuffer.transferTo(SocketSendBufferPool.java:239)
at org.jboss.netty.channel.socket.nio.NioWorker.write0(NioWorker.java:469)
at org.jboss.netty.channel.socket.nio.NioWorker.writeFromTaskLoop(NioWorker.java:392)
at org.jboss.netty.channel.socket.nio.NioSocketChannel$WriteTask.run(NioSocketChannel.java:276)
at org.jboss.netty.channel.socket.nio.NioWorker.processWriteTaskQueue(NioWorker.java:268)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:199)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
次のように私の送信コードは、次のように
Channels.write(clientChannel, messageObject);
私の近くのコードは次のとおりです。
ChannelGroupFuture future = ALL_CHANNELS.close();
future.awaitUninterruptibly();
if (null != clientBootstrap) {
clientBootstrap.releaseExternalResources();
}
は私が閉じる前にチャンネルをフラッシュするために必要なものはありますか?
優れています。これは数日間私を悩ましていた。私が見つけたNettyの例のどれもこれをしません。 – DarVar
Nopeはすぐに話しました。これはうまくいかなかった。後続のメッセージ送信は、チャネルが閉じられているため失敗します。 – DarVar
私は送信/受信を完了したとき、つまり最後の書き込みの後にのみチャンネルを閉じる必要があると思います。 – Veebs