Как реализовать конечную точку REST Long Polling в приложении Spring Boot? - PullRequest
0 голосов
/ 10 декабря 2018

Не могли бы вы поделиться каким-либо современным руководством или объяснить, как реализовать конечную точку REST Long Polling с последней версией Spring (Spring Boot)?

Все, что я нашелк этому времени довольно устарела и была выпущена пару лет назад.

Итак, я поднял вопрос, является ли Лонг-Поллинг все еще хорошим подходом?Я знаю, что это используется в chess.com

1 Ответ

0 голосов
/ 10 декабря 2018

Для длинного запроса на вытягивание вы можете использовать DeferredResult.когда вы возвращаете ответ DeferredResult, поток запроса будет свободным, и этот запрос обрабатывается рабочим потоком.Вот один пример:

@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;
    }

На этот запрос дать ответ через 10 секунд ожидания.если вы подождете более 100 секунд, вы получите ответ тайм-аута.

Посмотрите на this .

...