• websocket 在web項目中的应用(服务器推消息)


    客户端代码:

    var socket = null;
    var url = "wss://" + window.location.host + "/projectName/ws";
    if(window.location.protocol == "http:") {
        url = "ws://" + window.location.host + "/projectName/ws";
    }
    var timeout;
    var reconnecting = false;//是否在重连

    //重新连接
    function reConnectWebsocket() {
        if(reconnecting) {
            return;
        };
        reconnecting = true;
        //有定时任务 先取消再设置
        timeout && clearTimeout(timeout);
        //10秒重连
        timeout = setTimeout(function () {
            console.log('try to reconnect websocket');
            reconnecting = false;
            createWebsocket();
        }, 10000);

    }
    //初始化websocket
    function createWebsocket() {
        try {
            if ("WebSocket" in window) {
                socket = new WebSocket(url);
            } else if ("MozWebSocket" in window) {
                socket = new MozWebSocket(url);
            } else {
                socket = new WebSocket(url);
            }
            socket.onopen = function () {
                console.log("connect to websocket");
            };
            socket.onmessage = function (evt) {
                console.log('recv message:'+ evt.data);
                WsServiceListReload(selectedGroupName);
            };
            socket.onclose = function (evt) {
                console.log(evt);
                reConnectWebsocket();
            }
            socket.onerror = function (evt) {
                console.log(evt);
            }
        } catch (err) {
            console.error(err);
            reConnectWebsocket();
        }

    }
    createWebsocket();

    服务端:

    import org.apache.log4j.Logger

    import javax.websocket.CloseReason
    import javax.websocket.OnClose
    import javax.websocket.OnError
    import javax.websocket.OnMessage
    import javax.websocket.OnOpen
    import javax.websocket.Session
    import javax.websocket.server.ServerEndpoint
    import java.util.concurrent.ConcurrentHashMap


    @ServerEndpoint("/ws")  //websocket连接地址
    class OriginWebSocketService {

        private final Logger log = Logger.getLogger(this.class);//日志
        //存储客户端session
        public static Map<String, Session> conMap = new ConcurrentHashMap<String, Session>();
        OriginWebSocketService() {
            System.out.println("OriginWebSocketService()");
        }

        @OnOpen
        public void onOpen(Session session) throws IOException {
            //session.getBasicRemote().sendText("你好,客户端");
            log.info("client connect ,client id:" << session.getId());
            conMap.put(session.getId(),session);


        }

        @OnMessage
        public void onMessage(String message, Session session) throws IOException {
            log.info("收到消息:" + message);
        }


        @OnError
        public void onError(Throwable e) {
            e.printStackTrace();
        }

        @OnClose
        public void onClose(Session session, CloseReason reason) {
            log.info("client disconnect ,client id:" << session.getId());
            log.warn(reason.toString());
            conMap.remove(session.getId());
        }

        //广播消息
        public static broadcast(String json)   {
            try{
                for(String key:conMap.keySet())  {
                    Session val = conMap.get(key);
                    if(val != null) {
                        val.getBasicRemote().sendText(json);
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }

        }
    }
     

  • 相关阅读:
    echart简单组件封装
    【华为机试题分析】 6 质数因子
    utniy untiyWebrequest加载本地音频
    Golang go-redis cluster模式下不断创建新连接,效率下降问题解决
    【MATLAB】【函数介绍】cp2tform函数从控制点对推断空间变换
    1.1信息系统与信息化-1.2信息系统开发方法
    区块链钱包安全汇总
    ElecSuper SEUC10F5V4U 保护电压敏感元件
    数据中台开发流程
    企业架构LNMP学习笔记22
  • 原文地址:https://blog.csdn.net/cuibruce/article/details/125594343