Netty中的“操作完成”是什么意思

时间:2018-07-30 14:34:16

标签: java netty

我的问题实际上是:

当调用ChannelFutureListener.operationCompleteFuture.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()) {..}块表示邮件已到达目的地吗?

任何答案都受到高度赞赏,但引用某些消息来源也是不错的:)

谢谢!

1 个答案:

答案 0 :(得分:1)

这基本上意味着名称所暗示的含义,您请求的操作已完成。对于writeAndFlush(...),这意味着write(...) / writev(...)的系统调用已完成,因此已转移到内核网络堆栈,仅此而已。

因此,不能保证远程方已收到该消息(这只是TCP的工作方式)。如果需要保证,则需要在协议中添加一些内容(例如ACK消息)。