当前位置: 首页 > 知识库问答 >
问题:

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

卫甫
2023-03-14

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

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

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

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

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

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

共有1个答案

狄凯
2023-03-14

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

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

另一方面,默认情况下,Netty具有ChannelOption。AUTO_READ已打开,因此您根本不需要调用read()。它只是在连接变为活动状态时读取。

 类似资料:
  • 问题内容: 我不知道为什么出现java.io.EOFException。从服务器获取二进制流后,我想写一个文件。 这是我的代码 堆栈跟踪 问题答案: 它说,DataInputStream.readByte API不会在EOS上返回-1 返回:此输入流的下一个字节为带符号的8位字节。 抛出:EOFException-如果此输入流已到达末尾。 假定使用DataInputStream.readByte时

  • 问题内容: 我有一个向服务器发送消息的客户端套接字,每当服务器收到消息时,我都希望在客户端得到确认。是否有可能得到那个认可。我使用apache mina开发了客户端。提前致谢。 问题答案: TCP中没有消息,只有字节流。有一个内部ACK机制,用于跟踪已正确接收到多少流,但应用程序不可用。如果您需要服务器的确认,则服务器必须发送该确认。

  • 我有一个向服务器发送消息的客户端套接字,我想在服务器收到消息时在客户端得到一个确认。有没有可能得到那份承认。我使用apache Mina开发了客户端。提前道谢。

  • socket_read和socket_recv之间有什么区别?我正在尝试使用PHP套接字,但使用socket_read时收到了以下警告: 请帮帮我!

  • 这是来自.properties得my DB配置: 这是config.xml: 实际上,我可以很容易地访问我们的本地web应用程序,并且可以在日志中看到到DB的连接跟踪,但对于批处理来说,情况并非如此。 在我有了这个之后: 有人帮忙吗?