如何在 Reactor Netty HttpSever 响应中添加延迟
How to add delay in Reactor Netty HttpSever response
我创建了一个工作正常的 Reactor Netty HTTPSever,我想为每个响应添加一个延迟,即如果我发送一个请求,我应该在 10 秒后得到响应,我需要这个延迟来测试一些东西。下面是用于创建服务器的代码
DisposableServer server = HttpServer.create().port(port).protocol(HttpProtocol.H2C).metrics(true, s -> s)
.wiretap(false).handle((request, response) -> response.status(httpResponseStatus).send()).bindNow();
server.onDispose().block();
send()
方法 returns Mono
,因此您可以调用 Mono
提供的 delay*
运算符。上面的例子可以改成这样(下面这个例子延迟 headers 并发送一个空响应 body):
DisposableServer server =
HttpServer.create()
.port(port)
.protocol(HttpProtocol.H2C)
.metrics(true, s -> s)
.wiretap(false)
.handle((request, response) ->
response.status(httpResponseStatus)
.send()
.delaySubscription(Duration.ofSeconds(10)))
.bindNow();
server.onDispose().block();
更新:
如果 I/O 处理程序需要先延迟然后发送一些非空响应,示例可以更改为以下示例:
DisposableServer server =
HttpServer.create()
.port(port)
.protocol(HttpProtocol.H2C)
.metrics(true, s -> s)
.wiretap(false)
.handle((request, response) ->
Mono.delay(Duration.ofSeconds(10))
.flatMap(l -> {
// Set status code if needed
response.status(httpResponseStatus);
return response.sendString(Mono.just(String.valueOf(responseCode)).then();
}))
.bindNow();
server.onDispose().block();
我创建了一个工作正常的 Reactor Netty HTTPSever,我想为每个响应添加一个延迟,即如果我发送一个请求,我应该在 10 秒后得到响应,我需要这个延迟来测试一些东西。下面是用于创建服务器的代码
DisposableServer server = HttpServer.create().port(port).protocol(HttpProtocol.H2C).metrics(true, s -> s)
.wiretap(false).handle((request, response) -> response.status(httpResponseStatus).send()).bindNow();
server.onDispose().block();
send()
方法 returns Mono
,因此您可以调用 Mono
提供的 delay*
运算符。上面的例子可以改成这样(下面这个例子延迟 headers 并发送一个空响应 body):
DisposableServer server =
HttpServer.create()
.port(port)
.protocol(HttpProtocol.H2C)
.metrics(true, s -> s)
.wiretap(false)
.handle((request, response) ->
response.status(httpResponseStatus)
.send()
.delaySubscription(Duration.ofSeconds(10)))
.bindNow();
server.onDispose().block();
更新: 如果 I/O 处理程序需要先延迟然后发送一些非空响应,示例可以更改为以下示例:
DisposableServer server =
HttpServer.create()
.port(port)
.protocol(HttpProtocol.H2C)
.metrics(true, s -> s)
.wiretap(false)
.handle((request, response) ->
Mono.delay(Duration.ofSeconds(10))
.flatMap(l -> {
// Set status code if needed
response.status(httpResponseStatus);
return response.sendString(Mono.just(String.valueOf(responseCode)).then();
}))
.bindNow();
server.onDispose().block();