websocket重连后open时readystate为3

项目中使用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的截图

clipboard.png

求大手子解答一波!

阅读 21.6k
2 个回答

我自己的锅,已经解决了。后端是php,close是我前端执行的,新的websocket我在启动的时候建立了两次,第二次建立的状态没获取到,拿的第一次的状态,刚好第一次的状态为3了。把多余的建立去掉就ok了。

后端是node?
websocket至少也要双向通信吧
执行close的是哪一边呢

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题