服务端
1、引用依赖。(spring与websocket整合后的场景启动器)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2、创建配置类来配置webSocket和stomp进行消息传递
注意:springBoot2.0版本后使用 实现WebSocketMessageBrokerConfigurer接口;
2.0以下版本继承AbstractWebSocketMessageBrokerConfigurer 抽象类
**
* websocket配置类
* springBoot2.0版本后使用 实现WebSocketMessageBrokerConfigurer接口;
* 2.0以下版本继承AbstractWebSocketMessageBrokerConfigurer 类;
* @author 1916
* @create 2019-10-21 16:30
*/
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
/**
*注册一个Stomp 协议的endpoint指定URL为myWebSocket,
* 并用.withSockJS()指定 SockJS协议
* .setAllowedOrigins("*")设置跨域
*/
registry.addEndpoint("/myWebSocket").setAllowedOrigins("*").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
//配置消息代理(message broker)
//将消息传回给以‘/topic’开头的客户端
registry.enableSimpleBroker("/topic");
}
}
3、发送消息。(使用Spring的定时器来进行任务调度,定时向客户端推送消息)
/**
* 基于websocket做服务消息推送
*
* @author 1916
* @create 2019-10-21 15:42
*/
@Component
public class WebSocketController {
@Autowired
private SimpMessagingTemplate simpMessagingTemplate; //消息(发送)推送模板
@Scheduled(fixedDelay = 1000*30) //每隔30秒向客户端发送一次数据
public void sendMessage() {
simpMessagingTemplate.convertAndSend("/topic/ip","你好啊,我是渣渣辉。你好我是古天乐");
}
}
4、在启动类上使用@EnableScheduling注解开启定时器
@EnableScheduling
@SpringBootApplication
public class MessagePushApplication {
public static void main(String[] args) {
SpringApplication.run(MessagePushApplication.class, args);
}
}
客户端接收推送的信息
<script>
var stompClient = null;
function connect() {
//设置访问的服务端接口
var socket = new SockJS("http://localhost:8080/myWebSocket");
//获取客户端与服务端连接对象
stompClient = new Stomp.over(socket);
stompClient.connect({}, function (frame) {
console.log("---------------连接状态-------------------\n");
console.log(frame);
//监听/topic/ip 接口返回的数据
stompClient.subscribe("/topic/ip", function (body) {
console.log("---------------服务端响应消息-------------------\n");
console.log(body);
});
});
}
connect();//调用
</script>