导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
跳狗子
<script>
var websocket = null;
if('websocket' in window){
websocket = new WebSocket('ws://localhost:8086/webSocket');
}else{
alert("该浏览器不支持websocket!");
}
websocket.onopen = function (event) {
console.log('建立连接');
}
websocket.onclose = function (event) {
console.log('关闭连接');
}
websocket.onmessage = function (event) {
console.log('收到消息:' + event.data);
//弹窗提醒、播放音乐
}
websocket.onerror = function (event) {
alert('websocket通信发生错误!');
}
//窗口关闭时关闭wevsocket
websocket.onbeforeunload = function (event) {
websocket.close();
}
</script>
</body>
</html>
后端
config
package com.ray.config;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Component
public class WebsocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
websocket
package com.ray.utils;
import org.springframework.stereotype.Component;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
@Component
@ServerEndpoint("/webSocket")
public class Websocket {
private Session session;
private static CopyOnWriteArraySet<Websocket> webSocketSet = new CopyOnWriteArraySet<>();
@OnOpen
public void onOpen(Session session){
this.session = session;
webSocketSet.add(this);
System.out.println("【websocket消息】有新的连接,总数:"+webSocketSet.size());
}
@OnClose
public void onClose(){
webSocketSet.remove(this);
System.out.println("【websocket消息】断开连接,总数:"+webSocketSet.size());
}
@OnMessage
public void OnMessage(String message){
System.out.println("【websocket消息】收到客户端发来的消息:"+message);
}
public void sendMessage(String message){
for(Websocket websocket: webSocketSet){
System.out.println("【websocket消息】广播消息:"+message);
try {
websocket.session.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
controller
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
private Websocket websocket;
@RequestMapping("getOrderList")
public String getOrderList(){
return "order_list";
}
@RequestMapping("createOrder")
@ResponseBody
public String createOrder(){
//创建订单
//给商家平台发生websocket消息
websocket.sendMessage("您有新的订单");
return "创建订单成功";
}
}
测试效果
1.测试连接状态
2.用户生成订单,客户端收到订单生成消息