【发布时间】:2021-01-12 14:05:06
【问题描述】:
我在我的一个项目中使用 Netty。有一个流程,我必须从其他线程(其他 netty 的工作线程)向客户端发送一些数据:
final ChannelFuture writeAndFlushFuture = ctx.channel().writeAndFlush(out)
.addListener(new GenericFutureListener<Future<? super Void>>() {
@Override
public void operationComplete(Future<? super Void> future) throws Exception {
LOGGER.info("=========> dsgdsfgdsfgdfsgdfsgsdgfd");
}
});
此外,我正在等待客户端收到我的有效负载后的响应。我也将超时与它相关联,因此每当客户端未在时间范围内回复时,我都会从服务器关闭上下文(假设连接错误)。
发生了一些奇怪的事情。每当我将有效负载发送到客户端时,我的日志中都没有打印出来
dsgdsfgdsfgdfsgdfsgsdgfd
但是,由于超时,它会在我关闭连接之前打印出来。我不确定我做错了什么,没有立即发送有效负载,而是在关闭连接之前。
这里会发生什么?
【问题讨论】:
-
想要再添加 1 条信息,如果我直接在工作线程上发送有效负载(从 InboundHandler 中),则会发送有效负载。但是当我把这个逻辑包装在
CompletableFuture.runAsync(/*send payload*/)