Вот моя ситуация, когда я написал демо, которое будет отправлять два разных запроса на мой сервер одновременно.
Обычно: 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=======
Ненормально: 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=======
Демонстрация: вероятно, чтобы отправить два разных запроса:
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...}