我想从netty确认在关闭连接之前发生了读取事件。它是否实际以字节读取或发生错误并不重要。
从挖掘网络代码,我不相信以下保证操作顺序:
channel.read();
channel.close();
由于读取事件不是netty事件循环中的“任务”,因此关闭任务可能会在读取事件之前执行。
没有可以使用的“阅读未来”。所以我的问题是:在关闭频道之前保证读取事件发生的最佳方法是什么?“
如果使用自动读取:如果netty当前在其任务循环中通过线路写入数据,并且我们调用channel.close()将发生读操作还是先关闭发生?
答案 0 :(得分:2)
在Netty中,read()
和flush()
是特殊操作,不会返回ChannelFuture
。这是因为read()
操作的结果是channelRead()
,channelReadComplete()
或exceptionCaught()
。 flush()
操作没有ChannelFuture
,因为它始终伴有write()
,您将在那里获得未来。
因此,要查看数据是否实际从套接字读取,您可以查看是否已调用您的处理程序channelRead()
。
另一方面,默认情况下,Netty已启用ChannelOption.AUTO_READ
,因此您根本无需致电read()
。只要连接变为活动状态,它就会立即读取。