鍍金池/ 問答/HTML5  HTML/ websocket重連后open時(shí)readystate為3

websocket重連后open時(shí)readystate為3

項(xiàng)目中使用websocket,在檢測(cè)登錄狀態(tài)自動(dòng)退出后調(diào)用過websocket的close()

  clearWs (state) {
    state.ws.needReconnect = false
    state.ws.close()
  }

當(dāng)前登錄頁不刷新直接進(jìn)行登錄時(shí)重新創(chuàng)建一個(gè)websocket

    let ws = websocket.createWs(url) // 在這里的時(shí)候可以看到ws.readyState = 1
    websocket.configWs(ws, events) // ??? <= 在這里的時(shí)候ws.readyState = 3

就很奇怪,然后就在onOpen事件里面報(bào)錯(cuò)了。

open (ws, event) {
  console.log('WS open')  // 我想知道為啥新建了一個(gè)ws一建起來readyState就直接變成3了
  ws.send(JSON.stringify({  // 在這里send報(bào)錯(cuò): ws is already in CLOSING or CLOSED state
    route: 'site/login',
    data: {
      token: store.state.loginToken,
      type: 'login'
    }
  }))
}

下圖是websocket的截圖

clipboard.png

求大手子解答一波!

回答
編輯回答
帥到炸

后端是node?
websocket至少也要雙向通信吧
執(zhí)行close的是哪一邊呢

2017年11月29日 10:59
編輯回答
糖豆豆

我自己的鍋,已經(jīng)解決了。后端是php,close是我前端執(zhí)行的,新的websocket我在啟動(dòng)的時(shí)候建立了兩次,第二次建立的狀態(tài)沒獲取到,拿的第一次的狀態(tài),剛好第一次的狀態(tài)為3了。把多余的建立去掉就ok了。

2018年2月28日 18:11