socket分为客户端和服务端,客户端监听服务端传的消息
客户端
——具体一点就是在写在js中
<!--这里是html5原生的webSocket-->
<script>
var websocket = null;
if ('WebSocket' in window){
websocket = new WebSocket('ws://***/**/webSocket');
}else {
alert('该浏览器不支持webSocket!');
}
websocket.onopen = function () {
console.log('建立连接');
};
websocket.onclose = function () {
console.log('连接关闭');
};
websocket.onmessage = function (event) {
console.log('收到消息:' + event.data);
//弹窗提醒,播放音乐等操作
};
websocket.onerror = function () {
alert('webSocket通讯发生错误!');
};
websocket.onbeforeunload = function () {
websocket.close();
};
</script>
服务端
1.引入依赖
<!--websocket-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2.配置
package com.**.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();
}
}
3.编写类(像个Controller,但是又把它当作Service在用,所以放在service包中)
package com.**.service;
import lombok.extern.slf4j.Slf4j;
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.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
@Component
@ServerEndpoint("/webSocket")
@Slf4j
public class WebSocket {
private Session session;
private static CopyOnWriteArraySet<WebSocket> webSocketCopyOnWriteArraySet = new CopyOnWriteArraySet<>();
@OnOpen
public void onOpen(Session session){
this.session = session;
webSocketCopyOnWriteArraySet.add(this);
log.info("【webSocket消息】 有新的连接,总数:{}", webSocketCopyOnWriteArraySet.size());
}
@OnClose
public void onClose(){
webSocketCopyOnWriteArraySet.remove(this);
log.info("【webSocket消息】 连接断开,总数:{}", webSocketCopyOnWriteArraySet.size());
}
@OnMessage
public void onMessage(String message){
log.info("【webSocket消息】 收到客户端发来的消息{}", message);
}
public void sendMessage(String message){
for (WebSocket webSocket: webSocketCopyOnWriteArraySet){
log.info("【webSocket消息】 广播消息,message={}", message);
try {
webSocket.session.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}