如何在 Spring Boot 应用程序中实现长轮询 REST 端点?
Posted
技术标签:
【中文标题】如何在 Spring Boot 应用程序中实现长轮询 REST 端点?【英文标题】:How to implement Long Polling REST endpoint in Spring Boot app? 【发布时间】:2019-05-10 21:18:31 【问题描述】:您能否分享任何最新的手册或在这里解释如何使用最新的 Spring (Spring Boot) 实现 REST Long Polling 端点?
此时我发现的所有内容都已过时,并且是几年前发布的。
那么,我提出了一个问题,长轮询仍然是一种好方法吗?我知道它在 chess.com 中使用过
【问题讨论】:
【参考方案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 了解更多选项。
【讨论】:
以上是关于如何在 Spring Boot 应用程序中实现长轮询 REST 端点?的主要内容,如果未能解决你的问题,请参考以下文章
哪些选项可用于使用 SOAP 在 Delphi 中实现长轮询?