请问您能否分享最新的手册或在此说明如何使用最新的Spring(Spring Boot)实现REST长轮询端点?
到目前为止,我找到的所有资料都相当过时,大多数是几年前发布的。
因此,我想问一下,长轮询是否仍然是一个好方法?我知道它在chess.com中使用过。
到目前为止,我找到的所有资料都相当过时,大多数是几年前发布的。
因此,我想问一下,长轮询是否仍然是一个好方法?我知道它在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)
或更长时间,你将得到一个超时的响应。
查看这里以获取更多选项。