如何在Spring Boot应用程序中实现长轮询REST端点?
2022-09-04 01:42:21
您是否愿意分享任何最新的手册或在此处解释如何使用最新的Spring(Spring Boot)实现REST Long Polling端点?
我当时发现的所有东西都已经过时了,并且是几年前发布的。
所以,我提出了一个问题,长轮询仍然是一个好方法吗?我知道它被用在 chess.com
您是否愿意分享任何最新的手册或在此处解释如何使用最新的Spring(Spring Boot)实现REST Long Polling端点?
我当时发现的所有东西都已经过时了,并且是几年前发布的。
所以,我提出了一个问题,长轮询仍然是一个好方法吗?我知道它被用在 chess.com
对于长轮询请求,可以使用 。返回响应时,请求线程将处于空闲状态,并且请求将由工作线程处理。下面是一个示例: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)
请查看此内容以获取更多选项。