Может ли Undertow использовать один и тот же рабочий поток ввода-вывода для обработки двух разных запросов? - PullRequest
0 голосов
/ 30 ноября 2018

Вот моя ситуация, когда я написал демо, которое будет отправлять два разных запроса на мой сервер одновременно.

Обычно: 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 использует один и тот же рабочий поток ввода-вывода

[   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 голосов
/ 30 ноября 2018

Теперь я думаю, что, возможно, проблема с номером NIO, так как я установил server.undertow.io-threads = 1, сервер всегда будет использовать один единственный поток NIO для обработки моих запросов «вверх» и «вниз» одновременно,повесьте запрос "up" и обработайте запрос "down".Но я НЕ понимаю, почему сервер НЕ блокирует запрос «вниз» снаружи, после того как запрос «вверх» завершен, затем начинаю обрабатывать запрос «вниз»;В конце концов, «запрос вверх» был впервые прибыл.

...