У меня есть этот код, который я хочу иметь возможность транслировать всем клиентам / сеансам:
public class EchoHandler implements WebSocketHandler {
@Override
public Mono<Void> handle(WebSocketSession session) {
return session
.send(session.receive().map(WebSocketMessage::retain));
}
}
На данный момент это только эхо для того же клиента, как это может вещать всем?
ОБНОВЛЕНИЕ:
Я провел некоторые эксперименты и придумал
@Override
public Mono<Void> handle(WebSocketSession session) {
BinaryWebsocketMessageSubscriber subscriber = new BinaryWebsocketMessageSubscriber(binaryEventPublisher);
return session.receive()
.map(WebSocketMessage::retain)
.map(this::toBinaryEvent)
.doOnNext(subscriber::onNext)
.doOnError(subscriber::onError)
.doOnComplete(subscriber::onComplete)
.zipWith(session.send(binaryOutputEvents.map(dataBuffer -> session.binaryMessage(dataBufferFactory -> dataBuffer))))
.then();
}
Все еще не работает, это обновление смогло отправить ответ другим Клиент веб-сокета, но только в очень короткий период. И для одного клиента это не будет длиться ~ 30-31 событий, затем он перестает работать. Не уверен, в чем причина. Вот суть полного класса EchoHandler .