【问题标题】:How to implement Long Polling REST endpoint in Spring Boot app?如何在 Spring Boot 应用程序中实现长轮询 REST 端点?
【发布时间】:2019-05-10 21:18:31
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案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 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 了解更多选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 2012-12-10
      • 2011-06-06
      相关资源
      最近更新 更多