鍍金池/ 問答/HTML/ websocket斷線后重新new了地址,ws.onmessage沒有數(shù)據(jù)

websocket斷線后重新new了地址,ws.onmessage沒有數(shù)據(jù)

WebSocket斷線后我重新new了一個鏈接,新的連接里可以繼續(xù)收到和發(fā)出數(shù)據(jù),但是我發(fā)現(xiàn)ws.onmessage沒有返重連后的數(shù)據(jù)
我感覺他是不是還在等斷線前的那個地址的數(shù)據(jù),這個怎么辦啊


// websocket.js

export function initWebsocket(user = {}, userType) {
    socketurl = "ws://" + WEBSOKET_URL + "http://////"
    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, ) {
    //發(fā)送信息時調(diào)用
    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('接收數(shù)據(jù)');
    const self = this;
    self.ws = initWebsocket(curUser, USER_TYPE);
    self.ws.onmessage = (event) => {
        const arg = JSON.parse(event.data);
        //處理接收的數(shù)據(jù)
    }
}
回答
編輯回答
夢囈

這里有解決辦法,詳細(xì)的進(jìn)去看就行了
https://www.oschina.net/p/rec...

2017年11月5日 04:30