В New Spring есть пример WebSocketClient на Документация Spring.
WebSocketClient client = new ReactorNettyWebSocketClient();
client.execute("ws://localhost:8080/echo"), session -> {... }).blockMillis(5000);
Но очень коротко и непонятно:
- Как отправить сообщение на сервер (подписаться на канал)?
- Затем обрабатывать входящий поток и отправлять сообщения Flux?
- Переподключиться к серверу при обрыве соединения?
Может ли кто-нибудь привести более сложный пример?
УПД. Я попытался сделать что-то вроде:
public Flux<String> getStreaming() {
WebSocketClient client = new ReactorNettyWebSocketClient();
EmitterProcessor<String> output = EmitterProcessor.create();
Flux<String> input = Flux.just("{ event: 'subscribe', channel: 'examplpe' }");
Mono<Void> sessionMono = client.execute(URI.create("ws://api.example.com/"),
session -> session
.send(input.map(session::textMessage))
.thenMany(session.receive().map(WebSocketMessage::getPayloadAsText).subscribeWith(output).then())
.then());
return output.doOnSubscribe(s -> sessionMono.subscribe());
}
Но это возвращает только одно сообщение. Как будто у меня не было подписки.