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

如何确认netty已尝试读取套接字,netty,Netty,我想从netty确认在我关闭连接之前发生了读取事件。不管它是以字节为单位读取,还是发生错误 通过对网络代码的挖掘,我不相信以下保证了操作顺序: channel.read(); channel.close(); 由于读取事件不是netty事件循环中的“任务”,因此有可能在读取事件之前执行关闭任务 没有可以使用的“阅读未来”。所以我的问题是:在关闭通道之前,保证读取事件发生的最佳方法是什么?” 如果使用自动读取:如果netty当前在其任务循环中,通过线路写入数据,我们调用channel.close

我想从netty确认在我关闭连接之前发生了读取事件。不管它是以字节为单位读取,还是发生错误

通过对网络代码的挖掘,我不相信以下保证了操作顺序:

channel.read();
channel.close();
由于读取事件不是netty事件循环中的“任务”,因此有可能在读取事件之前执行关闭任务

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

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

在netty中,
read()
flush()
是不返回
ChannelFuture
的特殊操作。这是因为
read()
操作的结果是
channelRead()
channelReadComplete()
exceptionCaught()
flush()操作没有
通道future
,因为它总是伴随着
write()
,并且您可以在那里获得未来

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


另一方面,默认情况下,Netty启用了
ChannelOption.AUTO_READ
,因此不需要调用
READ()
一点也不。它只会在连接激活后立即读取。

您能分享到目前为止的代码吗?这个解释对我来说很有意义;这更多的是关于Netty的设计问题,而不是关于使用Netty的特定代码位。@DonCruickshank您认为缺少什么信息?明白,但只有在数据丢失时才会发生这些情况实际读取。是否有任何方法可以知道我们试图读取,但没有可用的数据?或者,除了尝试读取数据之外,是否还有其他方法可以查看数据是否可用?最直接的问题如下。channelReadComplete看起来很有趣,从代码看,它总是会被触发,而不管数据的数量如何字节读取(或引发异常)。@trustin您能确认这一点吗?关于自动读取:如果netty当前在其任务循环中通过线路写入数据,我们调用
channel.close()
是先执行读取操作还是先执行关闭操作?@trustin@AndrewSchmidt我创建了一个简单的测试应用程序来尝试这一点,但它似乎不起作用。请求读取不会触发对
channelReadComplete
exceptionCaught
方法的调用。不过,可能是我搞砸了什么东西;the示例应用程序位于。