如果ChannelOutboundBuffer已填充,如何在Netty中干净地关闭连接?

如果ChannelOutboundBuffer已填充,如何在Netty中干净地关闭连接?,netty,Netty,在Netty 4.x中调用channel.disconnect()后,我遇到了以下一系列异常: io.netty.channel.StacklessClosedChannelException: null at io.netty.channel.AbstractChannel.close(ChannelPromise)(Unknown Source) ~[netty-transport-4.1.53.Final.jar:4.1.53.Final] 创建它们可能是因为Channe

在Netty 4.x中调用
channel.disconnect()
后,我遇到了以下一系列异常:

io.netty.channel.StacklessClosedChannelException: null
        at io.netty.channel.AbstractChannel.close(ChannelPromise)(Unknown Source) ~[netty-transport-4.1.53.Final.jar:4.1.53.Final]
创建它们可能是因为
ChannelOutboundBuffer
不是空的

如何在
close()之前清理
ChannelOutboundBuffer


如何避免它们,或者我应该抓住它们并忽略它们(如果没有办法避免它们的话)

close()
应该“清理”
ChannelOutboundBuffer
,这意味着它将失败所有仍然存在的写入操作,并出现
ClosedChannelException
。这听起来很正常。

再次感谢诺曼!在断开连接()之前,我找到了清理
ChannelOutboundBuffer
的方法:
while(channel.unsafe().outboundBuffer().remove())。但是因为它通过了不安全的()方法,所以我对它感到不舒服。这种方法会有一些不良副作用吗?你不应该这样做。。。。因为这基本上会成功所有的写作。这是不正确的,因为如果您在写入尚未完成的内容时关闭通道,则会出现异常(这就是发生的情况)。好的-因此,基本上这样做,我将无法识别哪些消息最终被发送,哪些消息未被发送。正确的方法是将此通道标记为关闭状态,然后在处理程序异常回调中处理异常。即使处理意味着忽略StacklessClosedChannelException if TO_BE_关闭被标记。