账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    websocket断线后重新new了地址,ws.onmessage没有数据
    36
    0

    WebSocket断线后我重新new了一个链接,新的连接里可以继续收到和发出数据,但是我发现ws.onmessage没有返重连后的数据
    我感觉他是不是还在等断线前的那个地址的数据,这个怎么办啊

    
    // websocket.js
    
    export function initWebsocket(user = {}, userType) {
        socketurl = "ws://" + WEBSOKET_URL + "//////"
        ws = new WebSocket(socketurl);
        ws.onopen = function (evt) {
            wsReadyState = evt.currentTarget.readyState;
            if (wsReadyState == 1) {
                //连接好了之后
                wsPromise = new Promise((resolve, reject) => {
                    resolve();
                })
                wsPromise.then((data) => {
                    let wsMsgListCopy = [
                        ...wsMsgList
                    ];
                    wsMsgListCopy.forEach((msg) => {
                        ws.send(JSON.stringify(msg));
                        wsMsgList.shift();
                    })
                })
                initEventHandle();
            }
        };
        return ws;
    }
    
    export function sendMsgByWebsccket(msg, toast, ) {
        //发送信息时调用
        ws.send(JSON.stringify(msg));
    }
    
    function createWebSocket(url) {
        try {
            ws = new WebSocket(url);
            initEventHandle();
        } catch (e) {
            reconnect(url);
        }
    }
    
    function initEventHandle() {
        ws.onclose = function () {
            reconnect(socketurl);
        };
        ws.onerror = function () {
            reconnect(socketurl);
        };
    }
    
    function reconnect(url) {
        if (lockReconnect) return;
        lockReconnect = true;
        setTimeout(function () {
            createWebSocket(url);
            lockReconnect = false;
        }, 2000);
    }
    
    const heartCheck = {
        timeout: 10000,
        serverTimeoutObj: null,
        reset: function () {
            clearTimeout(this.serverTimeoutObj);
            return this;
        },
        start: function () {
            const self = this;
            self.serverTimeoutObj = setTimeout(function () {
                ws.close();
                createWebSocket(socketurl);
            }, self.timeout)
        }
    }
    
    
    // index.js
    import { initWebsocket } from '../websocket'
    
    componentDidMount() {
        console.log('接收数据');
        const self = this;
        self.ws = initWebsocket(curUser, USER_TYPE);
        self.ws.onmessage = (event) => {
            const arg = JSON.parse(event.data);
            //处理接收的数据
        }
    }
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 孤痞成性 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部