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

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

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

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

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

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

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

最佳答案 在Netty中,read()和flush()是不返回ChannelFuture的特殊操作.这是因为read()操作的结果是channelRead(),channelReadComplete()或exceptionCaught(). flush()操作没有ChannelFuture,因为它总是伴随着write(),你会在那里得到未来.

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

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

点赞