Len aby sme sa spravne pochopili, tymi requestmi myslim deferred result objekty. ak uzivatel posle poziadavok na data, vytvori sa pre daneho uzivatela deferred result a ulzi sa do kolekcie az kym nie su pre neho nove data. Ako nahle su, tak sa deferred result objektu nasetuju dane data a ten sa potom vrati uzivatelovi ktory sa na ne poptaval. Deferred result sa potom zmaze pre daneho uzivatela z mapy.
No a jak se pozná to, že už data pro uživatele jsou? A jak budete hledat response, ke kterému ta data patří?
Jinak pokud je to asynchronní webový kontrolér, pozor na to, že tam je ta asynchronnost určená pro to, aby se zbytečně neblokovalo vlákno třeba při čekání na data z databáze nebo z nějaké webové služby, tedy pro věci, které by měly být vyřízené během pár vteřin. Z pohledu prohlížeče/klienta je to pořád synchronní komunikace, takže jakmile prohlížeč odešle poslední bajt požadavku, zapne stopky a měří timeout do prvního bajtu odpovědi – a pokud se nedočká ve stanoveném limitu, spojení resetuje a zobrazí chybu.
Pokud byste chtěl skutečně asynchronní komunikaci (např. chat), kde odpověď může přijít třeba za 5 nebo taky za 15 minut, je potřeba použít buď Server-sent events nebo WebSockets. Pro WebSockety má Spring také dobrou podporu včetně fallbacku pro staré prohlížeče, které WebSockety nepodporují.