【问题标题】:How to send message when Websocket opened on Webflux如何在 Webflux 上打开 Websocket 时发送消息
【发布时间】:2021-08-15 12:00:34
【问题描述】:
我创建了WebsocketHandler,正如Webflux websocket doc 中所示。
@Override
public Mono<Void> handle(WebSocketSession session) {
Flux<String> messages =
session.receive()
.map(webSocketMessage -> "New message");
return session.send(messages.map(session::textMessage));
}
但问题是,我想在 websocket 连接打开后立即发送某种"Hello" 消息。我怎样才能做到这一点?
【问题讨论】:
标签:
java
spring-boot
websocket
spring-webflux
【解决方案1】:
经过一番研究,我发现这可以通过 Flux 本身解决。我们将startWith 方法添加到Flux 就足够了。如startWith 方法的定义。
在此 Flux 序列之前添加给定值。
因此,我们将 Hello 消息添加到 Flux 的开头,它将首先发布。
@Override
public Mono<Void> handle(WebSocketSession session) {
Flux<String> messages =
session.receive()
.map(webSocketMessage -> "New message")
.startWith("Hello");
return session.send(messages.map(session::textMessage));
}
附:请记住,您还可以在前面加上 Publisher<? extends T> publisher,即 Flux 或 Mono,而不仅仅是简单的值。