2017-07-27 13 views
0

1つの接続(httpキープアライブ)を使用して複数のリクエストを作成する必要があり、それらの間に遅延を追加したいと思います。今の私の最後のハンドラでLastHttpContentは、前の要求から受信された後、私はチャンネルの次のHttpRequestを書く: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

関連する問題