客户端
<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 之后使用测试类进行测试方法会报错,暂时不知道原因。