我的问题实际上是:
当调用ChannelFutureListener.operationComplete
且Future.isSuccess()
为true
时(在上述方法ofc中),这是否保证了对方已收到消息?
具体示例:
public void sendMessage(String message) {
m_Context.writeAndFlush(toByteBuf(message)).addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture f) throws Exception {
if (f.isSuccess()) {
System.out.println("Remote party received message"); // is this safe to assume?
}
}
});
}
我们可以说如果代码进入if (f.isSuccess()) {..}
块表示邮件已到达目的地吗?
任何答案都受到高度赞赏,但引用某些消息来源也是不错的:)
谢谢!
答案 0 :(得分:1)
这基本上意味着名称所暗示的含义,您请求的操作已完成。对于writeAndFlush(...)
,这意味着write(...)
/ writev(...)
的系统调用已完成,因此已转移到内核网络堆栈,仅此而已。
因此,不能保证远程方已收到该消息(这只是TCP的工作方式)。如果需要保证,则需要在协议中添加一些内容(例如ACK消息)。