如何在 Webflux 上打开 Websocket 时发送消息

Posted

技术标签:

【中文标题】如何在 Webflux 上打开 Websocket 时发送消息【英文标题】:How to send message when Websocket opened on Webflux 【发布时间】: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" 消息。我怎样才能做到这一点?

【问题讨论】:

【参考方案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&lt;? extends T&gt; publisher,即 FluxMono,而不仅仅是简单的值。

【讨论】:

以上是关于如何在 Webflux 上打开 Websocket 时发送消息的主要内容,如果未能解决你的问题,请参考以下文章

Webflux,使用Websocket如何防止订阅两次反应式redis消息操作

如何将 Spring Webflux Websocket 路由作为注释?

Spring WebFlux 基础教程:WebSocket 使用

Spring WebFlux 和 WebSocket

Spring WebFlux 反应式 WebSocket 防止连接关闭

技术篇 | 从响应式编程到WebFlux