java long polling_如何在Spring Boot应用程序中实现Long Polling REST endpoints ?
对于长拉请求,您可以使用 DeferredResult . 当您返回DeferredResult响应时,请求线程将是空闲的,并且此请求由工作线程处理 . 这是一个例子:
@GetMapping("/test")
DeferredResult test(){
Long timeOutInMilliSec = 100000L;
String timeOutResp = "Time Out.";
DeferredResult 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秒,您将获得超时响应 .