2014-05-11 7 views
0

Je souhaite diffuser mon contenu en utilisant OutputStream ou Writer à partir de la méthode du contrôleur Spring MVC en utilisant une solution asynchrone, c'est-à-dire de ne pas bloquer le pool de base utilisé pour les requêtes http. Pour autant que je puisse trouver est d'utiliser DefferedResult<?> pour async en général. C'est bien quand vous retournez un nom de chaîne de vue, mais ne pouvez pas penser à une façon dont cela fonctionnerait avec le flux. Impossible de trouver quelque chose d'utile.Spring 3 MVC, réponse de flux asynchrone

Merci

+1

Eh bien, vous pouvez essayer d'utiliser l'approche WebSocket; le cliet écoute tous les événements, et vous avez simplement fini de diffuser le contenu en mode asynchrone et ensuite vous pouvez passer au client –

Répondre

0

Comme décrit here vous pouvez effectuer des calculs dans un autre thread ainsi unloded pool de threads http. Vous pouvez essayer de combiner le type de retour DefferedResult et byte[] (DefferedResult) (en enregistrant précédemment ByteArrayHttpMessageConverter). Ainsi, la dernière méthode ressemblera à ceci:

@ResponseBody 
public DefferedResult<byte[]> foo(HttpServlet response) { 
    //set headers using response 
    response.setContentType("someContentType"); 
    ... 

    DefferedResult<byte[]> r = new DefferedResult<>(); 
    executionService.submit(() -> { 
     r.setResult(getBytes()); 
    }); 
    return r; 
} 

Une autre option est de combiner Defferedresult et ResponseEntity. N'oubliez pas de l'utiliser dans le conteneur de servlet 3.0+