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

Spring WebSocket发送多条更新消息方法及官方示例代码修改方案

在Spring WebSocket中发送多条更新消息的解决方案

好问题!原来的@SendTo注解确实只能在方法执行完毕后自动发送一条消息,要在服务器处理过程中推送多条更新,你需要用Spring提供的SimpMessagingTemplate来主动控制消息发送时机。

核心思路

SimpMessagingTemplate是Spring专门用于发送STOMP消息的工具类,它允许你在代码的任意位置、任意次数地向指定目的地推送消息,完美解决单次返回的局限。

具体实现步骤

  1. 注入SimpMessagingTemplate
    在你的控制器中通过构造注入(Spring推荐的方式)获取这个工具类:

    @Controller
    public class GreetingController {
        // 注入消息发送模板
        private final SimpMessagingTemplate messagingTemplate;
    
        public GreetingController(SimpMessagingTemplate messagingTemplate) {
            this.messagingTemplate = messagingTemplate;
        }
    }
    
  2. 修改greeting方法,主动发送多条消息
    去掉或保留@SendTo都可以(如果保留,方法返回值仍会自动发送一条消息),然后在处理流程的不同阶段调用convertAndSend推送更新:

    @MessageMapping("/hello")
    // 这里可以去掉@SendTo,因为我们手动发送所有消息;如果保留,方法返回值会作为最后一条消息自动发送
    public void greeting(HelloMessage message) throws Exception {
        // 1. 发送初始状态:告知客户端处理已启动
        messagingTemplate.convertAndSend("/topic/greetings",
            new Greeting("开始处理你的请求," + HtmlUtils.htmlEscape(message.getName()) + "!"));
    
        // 模拟第一阶段服务器处理
        Thread.sleep(1000);
        // 2. 发送中间进度更新
        messagingTemplate.convertAndSend("/topic/greetings",
            new Greeting("已完成50%处理," + HtmlUtils.htmlEscape(message.getName()) + "!"));
    
        // 模拟第二阶段服务器处理
        Thread.sleep(1000);
        // 3. 发送最终处理结果
        messagingTemplate.convertAndSend("/topic/greetings",
            new Greeting("处理完成!Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!"));
    }
    

关键说明

  • 灵活性:你可以在任何逻辑节点调用messagingTemplate.convertAndSend,比如循环处理批量数据时,每处理完一条就推送一次进度。
  • 客户端兼容性:客户端不需要修改订阅逻辑,只要保持对/topic/greetings的订阅,就能接收所有推送的消息,只需要在前端代码中处理多条消息的展示即可。
  • 异步场景适配:如果你的服务器处理是异步的(比如调用了@Async方法),SimpMessagingTemplate也能在异步线程中正常使用,Spring会自动处理上下文传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:24:38