如何在 Netty 通道中调度 HttpRequest?
How to schedule HttpRequest in Netty channel?
我需要使用一个连接(http keep-alive)发出多个请求,并且我想在它们之间添加延迟。现在在我的最后一个处理程序中,我在接收到上一个请求的 LastHttpContent 后在通道中写入下一个 HttpRequest:
@Override
public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) {
...
if (msg instanceof LastHttpContent) {
...
ctx.channel().writeAndFlush(nextHttpRequest);
...
}
}
我想使用 Thread.sleep
会阻塞整个 netty 反应堆,所以我正在寻找一种正确的方法来延迟写入通道。
您可以安排一个任务来使用 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);
}
}
}
我需要使用一个连接(http keep-alive)发出多个请求,并且我想在它们之间添加延迟。现在在我的最后一个处理程序中,我在接收到上一个请求的 LastHttpContent 后在通道中写入下一个 HttpRequest:
@Override
public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) {
...
if (msg instanceof LastHttpContent) {
...
ctx.channel().writeAndFlush(nextHttpRequest);
...
}
}
我想使用 Thread.sleep
会阻塞整个 netty 反应堆,所以我正在寻找一种正确的方法来延迟写入通道。
您可以安排一个任务来使用 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);
}
}
}