Browse Source

!167 fix: 断线重连后,有概率吞消息的bug

Merge pull request !167 from blue/v_3.0.0
master
blue 6 months ago
committed by Gitee
parent
commit
9910061003
No known key found for this signature in database GPG Key ID: 173E9B9CA92EEF8F
  1. 23
      im-uniapp/common/wssocket.js
  2. 7
      im-uniapp/store/chatStore.js
  3. 7
      im-web/src/store/chatStore.js

23
im-uniapp/common/wssocket.js

@ -15,12 +15,10 @@ let connect = (wsurl, token) => {
lastConnectTime = new Date(); lastConnectTime = new Date();
socketTask = uni.connectSocket({ socketTask = uni.connectSocket({
url: wsurl, url: wsurl,
success: (res) => { success: (res) => {},
console.log("websocket连接成功");
},
fail: (e) => { fail: (e) => {
console.log(e); console.log(e);
console.log("websocket连接失败,10s后重连"); console.log("WebSocket连接失败,10s后重连");
setTimeout(() => { setTimeout(() => {
connect(); connect();
}, 10000) }, 10000)
@ -28,7 +26,7 @@ let connect = (wsurl, token) => {
}); });
socketTask.onOpen((res) => { socketTask.onOpen((res) => {
console.log("WebSocket连接已打开"); console.log("WebSocket连接成功");
isConnect = true; isConnect = true;
// 发送登录命令 // 发送登录命令
let loginInfo = { let loginInfo = {
@ -64,9 +62,11 @@ let connect = (wsurl, token) => {
closeCallBack && closeCallBack(res); closeCallBack && closeCallBack(res);
}) })
socketTask.onError((e) => { socketTask.onError(e => {
console.log("ws错误:",e) console.log("ws错误:", e)
close(1006); close(1006);
isConnect = false;
closeCallBack && closeCallBack(e);
}) })
} }
@ -93,11 +93,8 @@ let close = (code) => {
socketTask.close({ socketTask.close({
code: code, code: code,
complete: (res) => { complete: (res) => {
console.log("关闭websocket连接");
isConnect = false; isConnect = false;
if (code != 3099) { console.log("关闭websocket连接");
closeCallBack && closeCallBack(res);s
}
}, },
fail: (e) => { fail: (e) => {
console.log("关闭websocket连接失败", e); console.log("关闭websocket连接失败", e);
@ -108,8 +105,8 @@ let close = (code) => {
// 心跳设置 // 心跳设置
let heartCheck = { let heartCheck = {
timeout: 20000, // 每段时间发送一次心跳包 这里设置为20s timeout: 20000, //每段时间发送一次心跳包 这里设置为20s
timeoutObj: null, // 延时发送消息对象(启动心跳新建这个对象,收到消息后重置对象) timeoutObj: null, //延时发送消息对象(启动心跳新建这个对象,收到消息后重置对象)
start: function() { start: function() {
if (isConnect) { if (isConnect) {
console.log('发送WebSocket心跳') console.log('发送WebSocket心跳')

7
im-uniapp/store/chatStore.js

@ -361,7 +361,12 @@ export default defineStore('chatStore', {
this.fliterMessage(chats, 5000, 1000); this.fliterMessage(chats, 5000, 1000);
// #endif // #endif
// 记录热数据索引位置 // 记录热数据索引位置
chats.forEach(chat => chat.hotMinIdx = chat.messages.length); chats.forEach(chat => {
if(!chat.hotMinIdx || chat.hotMinIdx != chat.messages.length){
chat.hotMinIdx = chat.messages.length;
chat.stored = false;
}
});
// 将消息一次性装载回来 // 将消息一次性装载回来
this.chats = chats; this.chats = chats;
// 清空缓存,不再使用 // 清空缓存,不再使用

7
im-web/src/store/chatStore.js

@ -360,7 +360,12 @@ export default defineStore('chatStore', {
this.fliterMessage(chats, 10000, 1000) this.fliterMessage(chats, 10000, 1000)
} }
// 记录热数据索引位置 // 记录热数据索引位置
chats.forEach(chat => chat.hotMinIdx = chat.messages.length); chats.forEach(chat => {
if(!chat.hotMinIdx || chat.hotMinIdx != chat.messages.length){
chat.hotMinIdx = chat.messages.length;
chat.stored = false;
}
});
// 将消息一次性装载回来 // 将消息一次性装载回来
this.chats = chats; this.chats = chats;
// 清空缓存 // 清空缓存

Loading…
Cancel
Save