如何在Spring Boot应用程序中实现Long Polling REST端点?

时间:2018-12-09 23:35:22

标签: java rest spring-mvc spring-boot long-polling

您是否愿意分享任何最新的手册,或者在这里解释如何使用最新的Spring(Spring Boot)实现REST Long Polling端点?

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

因此,我提出一个问题,长轮询仍然是一种好方法吗?我知道它在Chess.com中使用了

1 个答案:

答案 0 :(得分:1)

对于长拉请求,您可以使用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