You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring WebFlux WebSocket客户端无法接收数据问题排查

问题分析与解决方案

你的客户端代码存在两个关键问题,导致无法接收数据:

1. Bean定义错误,流未被订阅

@Bean标记的方法返回void,而client.execute()返回的Mono<Void>没有被Spring管理或订阅。在响应式编程中,流只有被订阅后才会执行,所以你的WebSocket连接根本没真正建立,或者建立后立即终止。

2. 消息打印方式错误

doOnNext(System.out::println)直接打印WebSocketMessage对象,输出的是对象的toString结果(不是实际消息内容),就算收到数据你也可能看不到有效信息。


修正后的客户端代码

@Bean
public Mono<Void> wsClientHandler() {
    WebSocketClient client = new ReactorNettyWebSocketClient();

    URI url = URI.create("ws://localhost:8080/out");
    return client.execute(url, session ->
            session.receive()
                    // 打印实际消息内容
                    .doOnNext(msg -> System.out.println("收到消息:" + msg.getPayloadAsText()))
                    .then());
}

修改说明

  • 将Bean方法的返回类型改为Mono<Void>,Spring会自动订阅这个Mono,保持WebSocket连接活跃。
  • 把System.out::println改为获取消息的文本内容msg.getPayloadAsText(),确保能看到实际收到的数据。

这样修改后,客户端就能正常接收并打印服务端推送的数据了。

内容的提问来源于stack exchange,提问作者Dmitry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:47:03