注意到,前端显示仍然连接着 socket,但后台却判断为不是 OPEN。所以把 if 改成 try.
This commit is contained in:
parent
b05c626d40
commit
b92876fb09
17
unisocket.js
17
unisocket.js
@ -4,20 +4,23 @@ const my = {
|
|||||||
heartbeating: undefined,
|
heartbeating: undefined,
|
||||||
listeners: {},
|
listeners: {},
|
||||||
heartbeatInterval: 20000,
|
heartbeatInterval: 20000,
|
||||||
reconnectInterval: 5000
|
reconnectInterval: 5000,
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
isAlive () {
|
isAlive () {
|
||||||
return my.socket && (my.socket.readyState === my.socket.OPEN)
|
return my.socket && my.socket.readyState === my.socket.OPEN
|
||||||
},
|
},
|
||||||
|
|
||||||
initSocket ({ url, relogin = false, stateManager = {} } = {}) {
|
initSocket ({ url, relogin = false, stateManager = {} } = {}) {
|
||||||
if (!my.socket || (my.socket.readyState !== my.socket.OPEN && typeof url === 'string')) {
|
if (!my.socket || (my.socket.readyState !== my.socket.OPEN && typeof url === 'string')) {
|
||||||
console.log({ _at: new Date().toJSON(), about: `WebSocket is connecting to ${url}...` })
|
console.log({ _at: new Date().toJSON(), about: `WebSocket is connecting to ${url}...` })
|
||||||
|
|
||||||
my.socket = uni.connectSocket({
|
my.socket = uni.connectSocket({
|
||||||
url: url.replace(/^http/, 'ws'),
|
url: url.replace(/^http/, 'ws'),
|
||||||
complete: () => { },
|
complete: () => {},
|
||||||
})
|
})
|
||||||
|
|
||||||
my.socket.onOpen((res) => {
|
my.socket.onOpen((res) => {
|
||||||
console.log({ _at: new Date().toJSON(), about: 'WebSocket onOpen: ', res })
|
console.log({ _at: new Date().toJSON(), about: 'WebSocket onOpen: ', res })
|
||||||
stateManager.socketAlive = true
|
stateManager.socketAlive = true
|
||||||
@ -39,6 +42,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}, my.heartbeatInterval) // 定期发送心跳,避免被关闭
|
}, my.heartbeatInterval) // 定期发送心跳,避免被关闭
|
||||||
})
|
})
|
||||||
|
|
||||||
my.socket.onClose((res) => {
|
my.socket.onClose((res) => {
|
||||||
console.log({ _at: new Date().toJSON(), about: 'Websocket onClose: ', res })
|
console.log({ _at: new Date().toJSON(), about: 'Websocket onClose: ', res })
|
||||||
stateManager.socketAlive = false
|
stateManager.socketAlive = false
|
||||||
@ -48,10 +52,12 @@ export default {
|
|||||||
this.initSocket({ url, relogin: true, stateManager })
|
this.initSocket({ url, relogin: true, stateManager })
|
||||||
}, my.reconnectInterval) // 定时尝试重连
|
}, my.reconnectInterval) // 定时尝试重连
|
||||||
})
|
})
|
||||||
|
|
||||||
my.socket.onError((err) => {
|
my.socket.onError((err) => {
|
||||||
console.log({ _at: new Date().toJSON(), about: 'Websocket onError: ', err })
|
console.log({ _at: new Date().toJSON(), about: 'Websocket onError: ', err })
|
||||||
stateManager.socketAlive = false
|
stateManager.socketAlive = false
|
||||||
})
|
})
|
||||||
|
|
||||||
my.socket.onMessage(({ data }) => {
|
my.socket.onMessage(({ data }) => {
|
||||||
// 在这里统一分发消息(用户端通常不需要返回结果给服务器,因此不用 rpc 模式,而用 event 模式。
|
// 在这里统一分发消息(用户端通常不需要返回结果给服务器,因此不用 rpc 模式,而用 event 模式。
|
||||||
try {
|
try {
|
||||||
@ -69,6 +75,7 @@ export default {
|
|||||||
}
|
}
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
closeSocket () {
|
closeSocket () {
|
||||||
if (my.socket) my.socket.close()
|
if (my.socket) my.socket.close()
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@ -76,11 +83,13 @@ export default {
|
|||||||
delete my.reconnecting
|
delete my.reconnecting
|
||||||
}, 2000)
|
}, 2000)
|
||||||
},
|
},
|
||||||
|
|
||||||
initListener (skevent, listener) {
|
initListener (skevent, listener) {
|
||||||
// 当该 skevent 尚不具有任何 listener 时,添加本 listener
|
// 当该 skevent 尚不具有任何 listener 时,添加本 listener
|
||||||
my.listeners[skevent]?.length > 0 || this.addListener(skevent, listener)
|
my.listeners[skevent]?.length > 0 || this.addListener(skevent, listener)
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
addListener (skevent, listener) {
|
addListener (skevent, listener) {
|
||||||
if (Array.isArray(my.listeners[skevent]) && typeof listener === 'function') {
|
if (Array.isArray(my.listeners[skevent]) && typeof listener === 'function') {
|
||||||
my.listeners[skevent].push(listener)
|
my.listeners[skevent].push(listener)
|
||||||
@ -89,12 +98,14 @@ export default {
|
|||||||
}
|
}
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
countListener (skevent) {
|
countListener (skevent) {
|
||||||
if (Array.isArray(my.listeners[skevent])) {
|
if (Array.isArray(my.listeners[skevent])) {
|
||||||
return my.listeners[skevent].length
|
return my.listeners[skevent].length
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
},
|
},
|
||||||
|
|
||||||
sendObject (dataObj) {
|
sendObject (dataObj) {
|
||||||
if (my.socket && my.socket.readyState === my.socket.OPEN) {
|
if (my.socket && my.socket.readyState === my.socket.OPEN) {
|
||||||
my.socket.send({
|
my.socket.send({
|
||||||
|
Loading…
Reference in New Issue
Block a user