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);
//处理接收的数据
}
}
这里有解决办法,详细的进去看就行了
https://www.oschina.net/p/rec...