Reactor Flux прокси для Socket.IO-клиента Java

Я реализую конечную точку Spring WebFlux, которая должна получать данные из Socket.IO-клиента Java.

Я не понимаю, как собрать входящие данные в поток Flux. Могу ли я создать новый Flux как-нибудь и подписать его на эти входящие данные? Спасибо за совет.

@GetMapping("/streaming", produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
    public Flux<MyRecourse> getStreaming() {

    URI uri = URI.create("http://localhost/socket.io"); // client
    Socket socket = IO.socket(uri);

    socket.on("event", args -> {    
        JSONObject obj = (JSONObject)args[0]; 
        MyRecourse recource = MyRecourse.create(obj);

        // how to put this recource into Flux stream?
    });

    return fluxStreamOfRecources;

}

1 ответ

Решение

Вы можете использовать Flux.create() для генерации Flux от слушателя события.

Flux.<MyResource>create(emitter -> {

     URI uri = URI.create("http://localhost/socket.io"); // client
     Socket socket = IO.socket(uri);

     socket.on("event", args -> {    
       JSONObject obj = (JSONObject)args[0]; 
       MyResource resource = MyResource.create(obj);
       emitter.next(resource);
     });

     // subscribe on error events
     socket.on(Socket.EVENT_CONNECT_ERROR, args -> {    
       // get error
       emitter.error(throwable);
     });

     // unsubscribe from events when the client cancels
     emitter.onDispose(() -> {
         // disconnect from socket
         // socket.off(...)
     });
 });
Другие вопросы по тегам