首页 > 解决方案 > Netty:当从 Netty 的工作线程以外的线程发送数据时,ctx.channel().writeAndFlush(out) 不起作用

问题描述

我在我的一个项目中使用 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

但是,它是在我因超时关闭连接之前打印出来的。我不确定我可能做错了什么,没有立即发送有效负载,而是在关闭连接之前。

这里会发生什么?

标签: javanetty

解决方案


实际上,当我将对象写入上下文时,缺少一个刷新:

ctx.writeAndFlush(commands);

现在,它工作正常。但奇怪的是,它在 Netty 的工作线程中执行时工作正常,即使没有刷新。


推荐阅读