【问题标题】:Netty: when does writeAndFlush channel future listener callback get executed?Netty:writeAndFlush 通道未来监听器回调什么时候执行?
【发布时间】:2016-08-06 22:27:57
【问题描述】:

我是 netty 的新手,并试图了解 writeAndFlush 的通道未来如何工作。考虑在 netty 客户端上运行以下代码:

final ChannelFuture writeFuture = abacaChannel.writeAndFlush("Test");
writeFuture.addListener(new ChannelFutureListener() {
    @Override
    public void operationComplete(ChannelFuture future) throws Exception {
        if (writeFuture.isSuccess()) {
            LOGGER.debug("Write successful");
        } else {
            LOGGER.error("Error writing message to Abaca host");
        }
    }
});

这个 writeFuture operationComplete 回调什么时候执行?

  1. netty 将数据交给操作系统后发送缓冲区(或)

  2. 操作系统将数据写入网络套接字后。 (或)

  3. 服务器实际接收到此数据后。

TIA

【问题讨论】:

    标签: callback netty


    【解决方案1】:
    1. After netty hands over the data to the OS send buffers (or)
    

    dataChannelOutboundBuffer(netty 的发送缓冲区)中删除后,将通知侦听器

    【讨论】:

    • @loxiu - 所以如果服务器接收到数据就没有通知?如果接收器被阻塞怎么办?我怎样才能检测到呢?
    • 是的,没有通知(或应用程序级确认)。如果接收者被阻塞,则发送者的操作系统缓冲区将满,则 netty 无法发送数据,通道的可写将变为 false。
    • 如果接收方缓慢或阻塞,从发送方发送的 Tcp 通常会受到限制(减慢)。这是否也会影响 netty 发送?还是在尽可能快地发送数据后通道变得不可写?
    • 我添加了一个 SO 问题以进行澄清,也许您可​​以在那里添加答案? stackoverflow.com/questions/42750075/…
    • @louxiu -- 对于每个 wirteAndFlush() 操作,我们需要在运行时创建和添加一个监听器,是不是太贵了?这个怎么理解?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 2019-07-16
    相关资源
    最近更新 更多