Undertow能够使用相同的IO辅助线程来处理两个不同的请求吗?

时间:2018-11-30 05:01:49

标签: spring-boot spring-webflux undertow

在这种情况下,我编写了一个演示,该演示将同时向我的服务器发送两个不同的请求。

通常: Undertow将使用两个XNIO工作线程

[   XNIO-1 I/O-3    XNIO-1 I/O-4] 

处理这两个请求:

2018-11-30 12:42:10.408  INFO 13052 --- [   XNIO-1 I/O-3] com.ecarx.asrapi.handler.ASRHandler      : ======收到Up请求, id=18179c3d-8958-4ca2-b5a1-65d0f73991da, ak=8c3d8bde3d94397e539dd6eff6e0318336db8e30=======

2018-11-30 12:42:11.896  INFO 13052 --- [   XNIO-1 I/O-4] com.ecarx.asrapi.handler.ASRHandler      : ======收到Down请求, id=18179c3d-8958-4ca2-b5a1-65d0f73991da, ak=8c3d8bde3d94397e539dd6eff6e0318336db8e30=======

Normal snapshot

异常: Undertow使用相同的IO工作线程

[   XNIO-1 I/O-3] 

处理我的不同请求:

2018-11-30 12:42:24.253  INFO 13052 --- [   XNIO-1 I/O-3] com.ecarx.asrapi.handler.ASRHandler      : ======收到Up请求, id=4b16a94a-7cc0-4904-ae2b-aae63093ed25, ak=91349ab08e093314705cb59872a206f25f3502bb=======

2018-11-30 12:42:25.737  INFO 13052 --- [   XNIO-1 I/O-3] com.ecarx.asrapi.handler.ASRHandler      : ======收到Down请求, id=4b16a94a-7cc0-4904-ae2b-aae63093ed25, ak=91349ab08e093314705cb59872a206f25f3502bb=======

Abnormal snapshot

演示:可能会发送两个不同的请求:

    String url = config.getUrl();
    executor.execute(() -> handleUpStream(url + "/up?id=" + id + "&ak=" + token, type, data));
    //handle down stream
    executor.execute(() -> handleDownStream(url + "/down?id=" + id + "&ak=" + token, responses));

汉德尔:

@PostMapping(value = "up", consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public Mono<Object> handleASRUp(@RequestParam(required = false) String id, @RequestParam String ak, ServerHttpRequest request) {// need more time to handle...}


@PostMapping(value = "down", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public Mono<Void> handleASRDown(@RequestParam String id, @RequestParam String ak, ServerHttpResponse response) {//need a little time to handle...}

1 个答案:

答案 0 :(得分:0)

现在我想可能是NIO编号问题,因为我将server.undertow.io-threads设置为1,服务器将始终使用一个NIO线程同时处理我的“ up”和“ down”请求,挂断“上”请求并处理“下”请求。 但是我不明白为什么服务器不阻止外部的“ Down”请求,在“ up”请求完成之后,才开始处理“ down”请求;毕竟,“到达要求”是首先到达的。