Java netty应用程序中请求和响应之间的延迟

Java netty应用程序中请求和响应之间的延迟,java,httprequest,netty,Java,Httprequest,Netty,我有一个扩展了SimpleChannelInboundHandler的处理程序。在发送特定请求的响应之前需要进行延迟,为此,我使用方法channelRead0(ChannelHandlerContext ctx,HttpRequest msg)中的下一个代码: 但它不起作用。我做错了什么?我如何解决这个问题?我认为您需要将其更改为: ctx.executor().schedule(() -> ctx.writeAndFlush(response), 3, TimeUnit.SECONDS)

我有一个扩展了
SimpleChannelInboundHandler
的处理程序。在发送特定请求的响应之前需要进行延迟,为此,我使用方法
channelRead0(ChannelHandlerContext ctx,HttpRequest msg)
中的下一个代码:


但它不起作用。我做错了什么?我如何解决这个问题?

我认为您需要将其更改为:

ctx.executor().schedule(() -> ctx.writeAndFlush(response), 3, TimeUnit.SECONDS);

我认为您需要将其更改为:

ctx.executor().schedule(() -> ctx.writeAndFlush(response), 3, TimeUnit.SECONDS);

我认为您需要将其更改为:

ctx.executor().schedule(() -> ctx.writeAndFlush(response), 3, TimeUnit.SECONDS);

我认为您需要将其更改为:

ctx.executor().schedule(() -> ctx.writeAndFlush(response), 3, TimeUnit.SECONDS);


你说“它不起作用”是什么意思?您是否收到错误消息?还要注意,您可能需要刷新写入操作(例如,通过使用writeAndFlush)。@HåkenLid我的意思是它没有产生任何结果,但根据Frederic Bregier的命题,当我将.write()更改为.writeAndFlush()时,它会被刷新worked@FredericBr艾吉尔,你能给我解释一下,为什么它以前不起作用,因为在我的处理程序中还有一个方法
channelReadComplete(ChannelHandlerContext ctx){ctx.flush();}
?不确定100%,但我可以猜chanelReadComplete可能会在3秒延迟之前出现,因此flush()会在写入之前出现,因此不会刷新上次写入。你说“它不工作”是什么意思?您是否收到错误消息?还要注意,您可能需要刷新写入操作(例如,通过使用writeAndFlush)。@HåkenLid我的意思是它没有产生任何结果,但根据Frederic Bregier的命题,当我将.write()更改为.writeAndFlush()时,它会被刷新worked@FredericBr艾吉尔,你能给我解释一下,为什么它以前不起作用,因为在我的处理程序中还有一个方法
channelReadComplete(ChannelHandlerContext ctx){ctx.flush();}
?不确定100%,但我可以猜chanelReadComplete可能会在3秒延迟之前出现,因此flush()会在写入之前出现,因此不会刷新上次写入。你说“它不工作”是什么意思?您是否收到错误消息?还要注意,您可能需要刷新写入操作(例如,通过使用writeAndFlush)。@HåkenLid我的意思是它没有产生任何结果,但根据Frederic Bregier的命题,当我将.write()更改为.writeAndFlush()时,它会被刷新worked@FredericBr艾吉尔,你能给我解释一下,为什么它以前不起作用,因为在我的处理程序中还有一个方法
channelReadComplete(ChannelHandlerContext ctx){ctx.flush();}
?不确定100%,但我可以猜chanelReadComplete可能会在3秒延迟之前出现,因此flush()会在写入之前出现,因此不会刷新上次写入。你说“它不工作”是什么意思?您是否收到错误消息?还要注意,您可能需要刷新写入操作(例如,通过使用writeAndFlush)。@HåkenLid我的意思是它没有产生任何结果,但根据Frederic Bregier的命题,当我将.write()更改为.writeAndFlush()时,它会被刷新worked@FredericBr艾吉尔,你能给我解释一下,为什么它以前不起作用,因为在我的处理程序中还有一个方法
channelReadComplete(ChannelHandlerContext ctx){ctx.flush();}
?不确定100%,但我可以猜测chanelReadComplete可能会在3秒延迟之前发生,因此flush()会在写入之前发生,因此不会刷新你的上一次写入。ty@Norman,已经完成了!你能给我解释一下,为什么它以前不工作,因为在我的处理程序中还有一个方法
channelReadComplete(ChannelHandlerContext ctx){ctx.flush();}
?正如我建议的,channelReadComplete会在你完成读取方法后立即启动,在写入之前的很长时间(3秒),因此你的channelReadComplete flush nothing…@FredericBrégier你能帮我解决另一个问题吗:@TMS我试图发布一个answear和一个示例链接。希望它足够清晰…泰@诺曼,已经完成了!你能给我解释一下,为什么它以前不工作,因为在我的处理程序中还有一个方法
channelReadComplete(ChannelHandlerContext ctx){ctx.flush();}
?正如我建议的,channelReadComplete会在你完成读取方法后立即启动,在写入之前的很长时间(3秒),因此你的channelReadComplete flush nothing…@FredericBrégier你能帮我解决另一个问题吗:@TMS我试图发布一个answear和一个示例链接。希望它足够清晰…泰@诺曼,已经完成了!你能给我解释一下,为什么它以前不工作,因为在我的处理程序中还有一个方法
channelReadComplete(ChannelHandlerContext ctx){ctx.flush();}
?正如我建议的,channelReadComplete会在你完成读取方法后立即启动,在写入之前的很长时间(3秒),因此你的channelReadComplete flush nothing…@FredericBrégier你能帮我解决另一个问题吗:@TMS我试图发布一个answear和一个示例链接。希望它足够清晰…泰@诺曼,已经完成了!你能给我解释一下,为什么它以前不工作,因为在我的处理程序中还有一个方法
channelReadComplete(ChannelHandlerContext ctx){ctx.flush();}
?正如我建议的,channelReadComplete会在你完成读取方法后立即启动,在写入之前的很长时间(3秒),因此你的channelReadComplete flush nothing…@FredericBrégier你能帮我解决另一个问题吗:@TMS我试图发布一个answear和一个示例链接。希望它足够清楚。。。