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
相关产品推荐
相关产品推荐

