如何确认netty已尝试读取套接字

时间:2013-11-14 15:43:04

标签: netty

我想从netty确认在关闭连接之前发生了读取事件。它是否实际以字节读取或发生错误并不重要。

从挖掘网络代码,我不相信以下保证操作顺序:

channel.read();
channel.close();

由于读取事件不是netty事件循环中的“任务”,因此关闭任务可能会在读取事件之前执行。

没有可以使用的“阅读未来”。所以我的问题是:在关闭频道之前保证读取事件发生的最佳方法是什么?“

如果使用自动读取:如果netty当前在其任务循环中通过线路写入数据,并且我们调用channel.close()将发生读操作还是先关闭发生?

1 个答案:

答案 0 :(得分:2)

在Netty中,read()flush()是特殊操作,不会返回ChannelFuture。这是因为read()操作的结果是channelRead()channelReadComplete()exceptionCaught()flush()操作没有ChannelFuture,因为它始终伴有write(),您将在那里获得未来。

因此,要查看数据是否实际从套接字读取,您可以查看是否已调用您的处理程序channelRead()

另一方面,默认情况下,Netty已启用ChannelOption.AUTO_READ,因此您根本无需致电read()。只要连接变为活动状态,它就会立即读取。