java - 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
但是,它是在我因超时关闭连接之前打印出来的。我不确定我可能做错了什么,没有立即发送有效负载,而是在关闭连接之前。
这里会发生什么?
解决方案
实际上,当我将对象写入上下文时,缺少一个刷新:
ctx.writeAndFlush(commands);
现在,它工作正常。但奇怪的是,它在 Netty 的工作线程中执行时工作正常,即使没有刷新。
推荐阅读
- linux - 如何修复主机“::1”的没有 pg_hba.conf 条目
- perl - 如果在命令行中没有输入任何参数,则显示错误
- javascript - React - 如何根据通过用户输入选择的每个视图的对象数量来重新渲染分页?
- postgresql - System.ArgumentException:不支持关键字:minimumpoolsize(参数“关键字”)使用 PostgreSQL
- java - 在位板上剪裁边缘
- python-3.x - 从随机日期发送消息
- r - 使用 group_by 和 summarise_all 为分类变量创建虚拟指标
- c++ - 为什么 std::filesystem::file_size(file) 与实际文件大小不同?
- python - 从字符串转换为日期时间时获取常规日期时间格式而不是纪元时间?
- python-3.x - 保存图像中的棋盘图案