【发布时间】:2019-05-10 21:18:31
【问题描述】:
您能否分享任何最新的手册或在这里解释如何使用最新的 Spring (Spring Boot) 实现 REST Long Polling 端点?
此时我发现的所有内容都已过时,并且是几年前发布的。
那么,我提出了一个问题,长轮询仍然是一种好方法吗?我知道它在 chess.com 中使用过
【问题讨论】:
标签: java rest spring-mvc spring-boot long-polling
您能否分享任何最新的手册或在这里解释如何使用最新的 Spring (Spring Boot) 实现 REST Long Polling 端点?
此时我发现的所有内容都已过时,并且是几年前发布的。
那么,我提出了一个问题,长轮询仍然是一种好方法吗?我知道它在 chess.com 中使用过
【问题讨论】:
标签: java rest spring-mvc spring-boot long-polling
对于长轮询请求,您可以使用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 了解更多选项。
【讨论】: