如何在 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,即 FluxMono,而不仅仅是普通值。