web-dev-qa-db-fra.com

Comment implémenter Long Polling REST endpoint dans l'application Spring Boot?

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

4
Pasha

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 .

8
Golam Mazid sajib