2017-07-27 55 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