WebSocket实现方式

js部分:

var websocket = null;
            //判断浏览器是否支持websocket
            if('WebSocket' in window){
                websocket = new WebSocket("ws://localhost:8902/aqfh/WebSocket");
                websocket.onopen = function(){

				}
                websocket.οnerrοr=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);
    }
}

最后是一个处理业务的类,查询相关的业务数据,满足条件推送给前台,具体代码就不贴了,可以是个线程,或者是定时任务

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章