如何在 Spring Boot 应用程序中实现长轮询 REST 端点?

How to implement Long Polling REST endpoint in Spring Boot app?

您能否分享任何最新手册或在此处解释如何使用最新的 Spring(Spring 引导)实现 REST 长轮询端点?

此时我发现的所有内容都已经过时并且是几年前发布的。

所以,我提出了一个问题,长轮询是否仍然是一种好方法?我知道它用于 chess.com

对于长轮询请求,可以使用DeferredResult。当您 return 一个 DeferredResult 响应时,请求线程将空闲并且请求将由工作线程处理。这是一个例子:

@GetMapping("/test")
DeferredResult<String> test(){
    long timeOutInMilliSec = 100000L;
    String timeOutResp = "Time Out.";
    DeferredResult<String> deferredResult = new DeferredResult<>(timeOutInMilliSec, timeOutResp);
    CompletableFuture.runAsync(()->{
        try {
            //Long polling task; if task is not completed within 100s, timeout response returned 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秒后提供响应。如果您设置 sleep(100) 或更长的时间,您将收到超时响应。

查看 this 以获得更多选项。