4

我想从 netty 确认在我关闭连接之前发生了读取事件。它是否实际以字节为单位读取或发生错误都没有关系。

通过挖掘 netty 代码,我不相信以下保证操作顺序:

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

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

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

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

4

1 回答 1

2

在 Netty 中,read()flush()是不返回 a 的特殊操作ChannelFuture。这是因为read()运算的结果是channelRead()channelReadComplete()exceptionCaught()flush()操作没有a ChannelFuture,因为它总是伴随着write(),你在那里得到未来。

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

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

于 2013-11-15T01:51:02.070 回答