客户端
<script>
var websocket = null;
if('websocket' in window){
websocket = new WebSocket('ws://');
}else {
alert('浏览器不支持websocket')
}
websocket.onopen = function (ev) {
console.log('websocket打开');
}
websocket.onclose = function (ev) {
console.log('websocket关闭');
}
websocket.onmessage = function (ev) {
console.log('收到websocket新消息' + ev.data);
//处理消息
}
websocket.onerror = function (ev) {
console.log('websocket出错');
}
window.onbeforereunload = function () {
websocket.close();
}
</script>
服务端
1.引入依赖
2.编写配置文件WebsocketConfig.java
@Bean
public ServerEndpointExporter serverEndpointExporter () {
return new ServerEndpointExporter();
}
3.编写controller类WebSocket.java
private Session session;
private static CopyOnWriteArraySet<WebSocket> copyOnWriteArraySet = newCopyOnWriteArraySet<>();
@OnOpen
public void onOpen (Session session) {
this.session = session;
copyOnWriteArraySet.add(this);
log.info("【webSocket消息】 有新的连接,连接总数:{}",copyOnWriteArraySet.size());
}
@OnClose
public void onClose () {
copyOnWriteArraySet.remove(this);
log.info("【webSocket消息】 关闭连接,连接总数:{}",copyOnWriteArraySet.size());
}
@OnMessage
public void onMessage (String message) {
log.info("【webSocket消息】 有新的信息,信息内容:{}",message);
}
public void sendMessage (String message){
for(WebSocket websocket : copyOnWriteArraySet){
log.info("【webSocket消息】 发送信息,信息内容:{}",message);
try {
websocket.session.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上为websocket的基础调用,在控制层调用sendMessage方法即可向前台页面推送消息。
但是编写配置文件WebsocketConfig.java 之后使用测试类进行测试方法会报错,暂时不知道原因。