Netty:ctx.channel().writeAndFlush(out) 在从 Netty 工作线程以外的线程发送数据时不起作用
Netty: ctx.channel().writeAndFlush(out) not working when data is being sent from thread other than Netty's worker thread
我在我的一个项目中使用 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
但是,它在我因超时关闭连接之前被打印出来。我不确定我可能做错了什么,没有立即发送有效负载,而是在关闭连接之前。
这里可能发生了什么?
实际上,当我将对象写入上下文时缺少刷新:
ctx.writeAndFlush(commands);
现在,它工作正常。但奇怪的是,它在Netty的工作线程中执行时工作正常,即使没有刷新。
我在我的一个项目中使用 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
但是,它在我因超时关闭连接之前被打印出来。我不确定我可能做错了什么,没有立即发送有效负载,而是在关闭连接之前。
这里可能发生了什么?
实际上,当我将对象写入上下文时缺少刷新:
ctx.writeAndFlush(commands);
现在,它工作正常。但奇怪的是,它在Netty的工作线程中执行时工作正常,即使没有刷新。