如何在Netty频道中安排HttpRequest?

时间:2017-07-27 08:57:03

标签: java http netty

我需要使用一个连接(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,所以我正在寻找一种正确的方法来延迟写入通道。

1 个答案:

答案 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);
        }               
    }

}