Souhaitez-vous avoir la gentillesse de partager un manuel à jour ou d'expliquer ici comment implémenter un point de terminaison REST Long Polling avec le dernier Spring (Spring Boot)?
Tout ce que j'ai trouvé à cette époque est assez obsolète et a été publié il y a quelques années.
J'ai donc posé une question: Long Polling est-il toujours une bonne approche? Je sais que c'est utilisé sur chess.com
Pour les longues demandes de tirage, vous pouvez utiliser DeferredResult
. lorsque vous renvoyez la réponse DeferredResult, le thread de demande sera libre et cette requête sera gérée par le thread de travail. Voici un exemple:
@GetMapping("/test")
DeferredResult<String> test(){
Long timeOutInMilliSec = 100000L;
String timeOutResp = "Time Out.";
DeferredResult<String> deferredResult = new DeferredResult<>(timeOutInMilliSec,timeOutResp);
CompletableFuture.runAsync(()->{
try {
//Long pooling task;If task is not completed within 100 sec timeout response retrun for this request
TimeUnit.SECONDS.sleep(10);
//set result after completing task to return response to client
deferredResult.setResult("Task Finished");
}catch (Exception ex){
}
});
return deferredResult;
}
Dans cette demande, donnez une réponse après avoir attendu 10 secondes. si vous attendez plus de 100 secondes, vous obtiendrez une réponse de temporisation.
Regardez ceci .