gpt4 book ai didi

java - 写操作的 Netty ChannelFuture 什么时候变成 "done?"

转载 作者:行者123 更新时间:2023-11-30 09:18:13 25 4
gpt4 key购买 nike

在 Netty 4 中,写操作的 ChannelFuture(假设是 NioSocketChannel)究竟何时会“完成”? Netty 是否等待 ACK 数据包? ChannelPipeline 中的输入和输出处理程序之间是否存在将写入 future 标记为已完成的相互依赖性?

最佳答案

Netty 不等待ACK 数据包。 ACK 数据包是 TCP 的一个实现细节,它大部分(完全?在 Java 中是,但不确定 C 中的套接字 API)对使用套接字的应用程序隐藏。如果您需要知道消息何时传递,您应该向您的应用层协议(protocol)添加一个确认组件。

在 Netty 3.x 中,Netty 将在给定消息写入套接字后调用 ChannelFuture 上的成功方法(并通知监听器)。我不太熟悉 Netty 4 的实现细节,但从我对源代码的追踪来看,我相信这在 Netty 4 中也是如此。

ChannelOutboundBuffer.remove() @ ChannelOutboundBuffer.java:263设定 future 的成功,由 NioSocketChannel.doWrite(ChannelOutboundBuffer) @ NioSocketChannel.java:264 调用消息写入套接字后。

请注意,写入套接字并不一定意味着消息已发送(部分或全部),只是它已写入 TCP 层套接字的发送缓冲区。

关于java - 写操作的 Netty ChannelFuture 什么时候变成 "done?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18580181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com