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