如何使用 STOMP 从 Spring WebSocket 服务器向 WebSocket 客户端发送消息?
Posted
技术标签:
【中文标题】如何使用 STOMP 从 Spring WebSocket 服务器向 WebSocket 客户端发送消息?【英文标题】:How to send message to WebSocket client from Spring WebSocket server using STOMP? 【发布时间】:2020-02-24 14:46:23 【问题描述】:我有两个使用 STOMP 的 Spring Boot WebSocket 应用程序:
-
WebSocket 服务器
WebSocket 客户端
我能够从客户端发送 WebSocket 消息并从服务器响应它。但是,现在我想向客户端发送一个 WebSocket 消息,该消息由服务器端的事件触发。
有人能告诉我一个方法吗?
这是我现在在服务器端的内容:
WebSocketConfig.java:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer
@Override
public void configureMessageBroker(MessageBrokerRegistry config)
config.enableSimpleBroker("/topic/");
config.setApplicationDestinationPrefixes("/app");
@Override
public void registerStompEndpoints(StompEndpointRegistry registry)
registry.addEndpoint("/alarm");
WebSocketController.java:
@Controller
public class WebSocketController
@MessageMapping("/alarm")
@SendTo("/topic/message")
public void processMessageFromClient(@Payload String message, Principal principal) throws Exception
System.out.println("WEBSOCKET MESSAGE RECEIVED" + message);
@RequestMapping(value = "/start/alarmName", method = RequestMethod.POST)
public String start(@PathVariable String alarmName) throws Exception
System.out.println("Starting " + alarmName);
/* SEND MESSAGE TO WEBSOCKET CLIENT HERE */
return "redirect:/";
【问题讨论】:
【参考方案1】:我在official spring documentation找到了答案。
你只需要注入一个SimpMessagingTemplate
。
我的控制器现在看起来像这样:
@Controller
public class WebSocketController
private SimpMessagingTemplate template;
@Autowired
public WebSocketController(SimpMessagingTemplate template)
this.template = template;
@MessageMapping("/alarm")
@SendTo("/topic/message")
public void processMessageFromClient(@Payload String message, Principal principal) throws Exception
System.out.println("WEBSOCKET MESSAGE RECEIVED" + message);
@RequestMapping(value = "/start/alarmName", method = RequestMethod.POST)
public String start(@PathVariable String alarmName) throws Exception
System.out.println("Starting " + alarmName);
this.template.convertAndSend("/topic/message", alarmName);
return "redirect:/";
【讨论】:
以上是关于如何使用 STOMP 从 Spring WebSocket 服务器向 WebSocket 客户端发送消息?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring 5.3 及更高版本中使用 Stomp 和 SockJS 处理 CORS 起源?
Spring stomp - 使用 SimpMessagingTemplate 从服务器发送消息
如何使用 spring+stomp+sockjs 获得 websocket 响应
使用 STOMP/WebSockets/Spring 从 @SubscribeMapping 返回原始字符串