我需要使用一个连接(http keep-alive)发出几个请求,我想在它们之间添加延迟。现在在我的上一个处理程序中,在收到上一个请求的LastHttpContent之后,我在通道中编写了下一个HttpRequest:
@Override
public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) {
...
if (msg instanceof LastHttpContent) {
...
ctx.channel().writeAndFlush(nextHttpRequest);
...
}
}
我认为使用Thread.sleep
将阻止整个netty reactor,所以我正在寻找一种正确的方法来延迟写入通道。
答案 0 :(得分:2)
您可以使用ChannelContext的执行程序安排任务写入消息:
public class ScheduledHttpWriter extends SimpleChannelInboundHandler<HttpObject> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception {
if (msg instanceof LastHttpContent) {
ctx.executor().schedule(new Runnable(){
@Override
public void run() {
ctx.channel().writeAndFlush(outBoundMessage);
}
}, 1000, TimeUnit.MILLISECONDS);
}
}
}