Java 写操作的净通道未来何时变为;“完成了吗?”;

Java 写操作的净通道未来何时变为;“完成了吗?”;,java,netty,Java,Netty,在Netty 4中,写入操作的ChannelFuture(比如对NioSocketChannel)何时变为“完成?”Netty是否等待ACK数据包?ChannelPipeline中的输入和输出处理程序之间是否存在任何相互依赖关系,以将写未来标记为已完成?Netty不会等待ACK数据包ACK数据包是TCP的一个实现细节,对于使用套接字的应用程序来说,它大部分(在java中完全是?是的,但在C中不确定套接字api是什么)。如果您需要知道消息何时被传递,您应该向应用层协议添加一个确认组件 在Netty

在Netty 4中,写入操作的
ChannelFuture
(比如对
NioSocketChannel
)何时变为“完成?”Netty是否等待
ACK
数据包?
ChannelPipeline
中的输入和输出处理程序之间是否存在任何相互依赖关系,以将写未来标记为已完成?

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

在Netty 3.x中,在给定消息写入套接字后,Netty将在
通道future
上调用success方法(并通知侦听器)。我对Netty 4的实现细节不太熟悉,但从我的跟踪来看,我相信在Netty 4中也是如此

设置将来的成功,并在将消息写入套接字后由调用


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

Netty无法等待ACK数据包。Java或BSD sockets API中的任何内容都不允许您这样做。谢谢您的详细回答!不幸的是,这不是我的协议(见),所以听起来我们可能只需要处理一些不确定性。干杯