js部分:
var websocket = null;
//判断浏览器是否支持websocket
if('WebSocket' in window){
websocket = new WebSocket("ws://localhost:8902/aqfh/WebSocket");
websocket.onopen = function(){
}
websocket.onerror=function(){
websocket.send("客户端连接失败");
}
websocket.onclose=function(){
websocket.send("客户端连接关闭");
}
websocket.onmessage=function(e){
//收到服务器消息后调用的方法,自己定义
send(e.data);
}
//监听异常事件
window.onbeforeunload = function () {
closeWebSocket();
}
}else{
alert("请换个浏览器再试!")
}
需要注意的是,网页访问的地址一定要和连接的websocket地址对应上,否则会连接失败
java部分:
WebServer类,主要是处理和前台的连接
@Component
@EnableScheduling
@ServerEndpoint("/WebSocket")
public class WebServer {
//socket连接
private Session session;
//建立连接调用的方法
@OnOpen
public void onOpen(Session session){
this.session = session;
WebSocketUtil.add(this);
}
//发送消息
public void sendMessage(String message) throws IOException {
this.session.getBasicRemote().sendText(message); //同步方法
}
//关闭调用
@OnClose
public void onClose(){
WebSocketUtil.remove(this);
}
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("来自客户端的消息:" + message);
}
@OnError
public void onError(Session session, Throwable error){
System.out.println("发生错误");
error.printStackTrace();
}
}
WebSocketUtil类,用来管理;连接,以及给前端发送消息
public class WebSocketUtil {
//用来存储所有连接
private static List<WebServer> list = Collections.synchronizedList(new ArrayList<WebServer>());
public static void sendMessage(String message){
//遍历当前所有客户端连接,分别给发送消息
for(WebServer server:list){
try {
server.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
//获取连接数
public static int getTotal(){
return list.size();
}
//增加连接
public static void add(WebServer ser){
list.add(ser);
}
//删除链接
public static void remove(WebServer ser){
list.remove(ser);
}
}
最后是一个处理业务的类,查询相关的业务数据,满足条件推送给前台,具体代码就不贴了,可以是个线程,或者是定时任务