项目中使用websocket,在检测登录状态自动退出后调用过websocket的close()
clearWs (state) {
state.ws.needReconnect = false
state.ws.close()
}
当前登录页不刷新直接进行登录时重新创建一个websocket
let ws = websocket.createWs(url) // 在这里的时候可以看到ws.readyState = 1
websocket.configWs(ws, events) // ??? <= 在这里的时候ws.readyState = 3
就很奇怪,然后就在onOpen事件里面报错了。
open (ws, event) {
console.log('WS open') // 我想知道为啥新建了一个ws一建起来readyState就直接变成3了
ws.send(JSON.stringify({ // 在这里send报错: ws is already in CLOSING or CLOSED state
route: 'site/login',
data: {
token: store.state.loginToken,
type: 'login'
}
}))
}
下图是websocket的截图
求大手子解答一波!
我自己的锅,已经解决了。后端是php,close是我前端执行的,新的websocket我在启动的时候建立了两次,第二次建立的状态没获取到,拿的第一次的状态,刚好第一次的状态为3了。把多余的建立去掉就ok了。