web-dev-qa-db-ja.com

Spring Bootアプリにロングポーリングを実装する方法RESTエンドポイント?

最新のマニュアルを共有したり、REST Long Pollingエンドポイントと最新のSpring(Spring Boot)を実装する方法)をここで説明したりしていただけませんか?

この時点で私が見つけたものはすべてかなり古く、数年前に発行されました。

それで、私はロングポーリングがまだ良いアプローチであるかという質問を提起しましたか? chess.comで使用されていることを知っています

4
Pasha

長いpullリクエストの場合は、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 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秒以上待機すると、タイムアウト応答が返されます。

this を見てください。

8