我正在使用Netty 4.1.12.Final编写一个HTTP客户端,我有单元测试来模拟HTTP服务器的崩溃,以便能够处理它。 我注意到,当它发生时,我的入站处理程序的exceptionCaught回调方法被调用:
java.io.IOException: Une connexion existante a dû être fermée par l’hôte distant
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(Unknown Source)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.read(Unknown Source)
at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
at io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:288)
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1100)
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:372)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:123)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
异常消息的英语等价物很可能是:
java.io.IOException: An existing connection was forcibly closed by the remote host
由于从我的入站处理程序的channelRead0方法抛出异常时也会调用此回调方法,所以我问了几个问题:
感谢您的任何提示!
答案 0 :(得分:0)
1)如果我们讨论的是TCP连接,那么每个IOException都会导致netty自动关闭连接,因为无法恢复。
2)我认为我完全不理解这个问题,因为通过exceptionCaught(...)
方法传递的每个异常都与ctx.channel()
3)总的来说,没有办法。如果它是一个TCP连接及其IOException并由实际传输触发,我们将关闭连接。