2017-07-27 26 views
0

我需要使用一个连接(http keep-alive)发出多个请求,并且我想在它们之间添加延迟。现在,在我的最后一个处理我写未来的HttpRequest通道从以前的请求被接受后LastHttpContent:如何在Netty频道中安排HttpRequest?

@Override 
public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) { 
    ... 
    if (msg instanceof LastHttpContent) { 
     ... 
     ctx.channel().writeAndFlush(nextHttpRequest); 
     ... 
    } 
} 

我想,用Thread.sleep将阻止整个网状反应堆所以我在寻找延迟写一个正确的方法在频道中。

回答

1

您可以安排一个任务写入使用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); 
     }    
    } 

} 
+0

的作品就像一个魅力 – AdamSkywalker