如何在 Webflux 上打开 Websocket 时发送消息
How to send message when Websocket opened on Webflux
我创建了 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"
消息。我怎样才能做到这一点?
经过一番研究我发现,这可以通过Flux本身来解决。我们在 Flux
中添加 startWith
方法就足够了。正如在 startWith
方法的定义中一样。
Prepend the given values before this Flux sequence.
因此我们将 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));
}
P.S。请记住,您还可以在前面加上 Publisher<? extends T> publisher
,即 Flux
或 Mono
,而不仅仅是普通值。
我创建了 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"
消息。我怎样才能做到这一点?
经过一番研究我发现,这可以通过Flux本身来解决。我们在 Flux
中添加 startWith
方法就足够了。正如在 startWith
方法的定义中一样。
Prepend the given values before this Flux sequence.
因此我们将 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));
}
P.S。请记住,您还可以在前面加上 Publisher<? extends T> publisher
,即 Flux
或 Mono
,而不仅仅是普通值。