2

ChannelFuture在 Netty 4 中, for a write 操作(比如说对 an )何时NioSocketChannel“完成”?Netty 是否等待ACK数据包?ChannelPipeline在将写入期货标记为已完成方面,输入和输出处理程序之间是否存在任何相互依赖关系?

4

1 回答 1

2

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

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

ChannelOutboundBuffer.remove() @ ChannelOutboundBuffer.java:263设置未来的成功,并NioSocketChannel.doWrite(ChannelOutboundBuffer) @ NioSocketChannel.java:264在消息写入套接字后被调用。

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

于 2013-09-03T02:55:07.630 回答