在线测试websocket工具http://www.blue-zero.com/WebSocket/
package com.bgs.web;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;import org.springframework.stereotype.Component;
@ServerEndpoint("/websocket")
public class MyWebSocket {
private static int onlineCount = 0;
private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<>();
private Session session;
@OnOpen //建立连接调用的方法
public void onOpen (Session session) {
this.session = session;
webSocketSet.add(this);
addOnlineCount();
System.out.println("有新链接加入!当前在线人数为:"+getOnlineCount());
}
@OnClose //关闭连接调用方法
public void OnClose() {
webSocketSet.remove(this);
subOnlineCount();
System.out.println("有一链接关闭!当前人数为:"+getOnlineCount());
}@OnMessage //发送消息调用方法
public void onMessage(String message,Session session) throws IOException {
System.out.println("来自客户的消息:"+message);
//群发消息
for(MyWebSocket item : webSocketSet) {
item.sendMessage(message);
}
}
public void sendMessage(String message) throws IOException {
this.session.getBasicRemote().sendText(message);
}
public static synchronized int getOnlineCount() {
return MyWebSocket.onlineCount;
}
public static synchronized void addOnlineCount() {
MyWebSocket.onlineCount++;
}
public static synchronized void subOnlineCount() {
MyWebSocket.onlineCount--;
}
}
HTML页面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <base href="localhost://localhost:8080/"> <title>My WebSocket</title> </head> <body> Welcome<br/> <div id="message"> </div> <input id="text" type="text"> <button onclick="send()">Send</button> <button onclick="closeWebSocket()">Close</button> </body> <script type="text/javascript"> var websocket = null; //判断当前浏览器是否支持WebSocket //本机IP if('WebSocket' in window){ websocket = new WebSocket("ws://192.168.36.26:8080/websocket"); }else{ alert("Not Support websocket") } //连接发生错误的回调方法 websocket.onerror = function () { setMessageInnerHTML("error"); }; //连接成功建立的回调方法 websocket.onopen = function (event) { setMessageInnerHTML("open"); } //接收到消息的回调方法 websocket.onmessage = function (event) { setMessageInnerHTML(event.data); } //连接关闭的回调方法 websocket.onclose = function () { setMessageInnerHTML("close"); } //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。 window.onbeforeunload = function () { websocket.close(); } //将消息显示在网页上 function setMessageInnerHTML(innerHTML) { document.getElementById('message').innerHTML += innerHTML + '<br/>'; } //关闭连接 function closeWebSocket() { websocket.close(); } //发送消息 function send() { var message = document.getElementById('text').value; websocket.send(message); } </script> </html>
也可以在浏览器输入这地址进行测试,自己电脑的ip地址加端口号,项目名还有socket路径,切记ip地址一定要写对,ipv4这个地址