本文介绍了websocket的简单应用案例,不是点对点案例而是在任何地方都可以使用,废话不多说直接上代码:
1.websocket配置信息:
//配置registry
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig2 implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
// ⽤户可以订阅来⾃以"/topic"为前缀的消息,客户端只可以订阅这个前缀的主题
config.enableSimpleBroker("/topic");
// 客户端发送过来的消息,需要以"/app"为前缀,再经过Broker转发给响应的Controller
// config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
//路径"/ws"被注册为STOMP端点,对外暴露,客户端通过该路径接⼊WebSocket服务
registry.addEndpoint("/ws")
.setAllowedOrigins("*")
.withSockJS();
}
}
2.代码实现调用:
import org.springframework.messaging.simp.SimpMessagingTemplate;
@Autowired
/**
*Spring的SimpMessagingTemplate能够在应⽤的任何地⽅发送消息,
*甚⾄不必以⾸先接收⼀条消息作为前提。
*使⽤SimpMessagingTemplate的最简单⽅式是将它
*(或者其接⼝SimpMessageSendingOperations)⾃动装配到所需的对象中。
*SimpMessagingTemplate可以为指定的⽤户发送消息。
*SimpMessagingTemplate还提供了convertAndSendToUser()⽅法。convertAndSendToUser()⽅法能够让我们给特定⽤户发送消息。
*simpMessageSendingOperations.convertAndSendToUser("1", "/message", "测试convertAndSendToUser"
*/
private SimpMessagingTemplate simpMessagingTemplate;
/**
* 前端websocket 订阅路径 全路径 /topic/signal
*解决SimpMessagingTemplate循环依赖问题:
* 在 Controller 层去注⼊ SimpMessagingTemplate,
*然后将其作为参数传给 Service层的 SocketService ⾥的⽅法去调⽤。
*/
@MessageMapping("/mileage")
public void mileage() {
}
simpMessagingTemplate.convertAndSend("/topic/mileage", msg);