var heartbeat,
ws = new WebSocket(url);
ws.onopen = function(e){
heartbeat = setInterval(function(){
ws.send({type:'heartbeat'});
},3e4);
plugin.emit('live.onopen', e, heartbeat);
},
ws.onerror = function(e){
plugin.emit('live.onerror',JSON.parse(e.data));
},
ws.onmessage = function(e){
plugin.emit('live.onmessage',JSON.parse(e.data));
},
ws.onclose = function(e){
plugin.emit('live.onclose',e);
};
return ws;
調(diào)用ws.close(); 鏈接依舊存在,執(zhí)行close也沒(méi)有報(bào)錯(cuò)
打日志看下ws.close()
是否真的被調(diào)用到。
還有你是怎么判定調(diào)用了ws.close()
后沒(méi)有關(guān)閉連接?
ws.close()系統(tǒng)函數(shù),沒(méi)辦法查看是否被真的調(diào)用,但是調(diào)用沒(méi)有報(bào)錯(cuò),就應(yīng)該是調(diào)用了。執(zhí)行ws.close()后,再次去執(zhí)行連接websocket,會(huì)報(bào)錯(cuò)WebSocket is already in CLOSING or CLOSED state.
看起來(lái)其實(shí)應(yīng)該已經(jīng)是關(guān)閉了,但是重新執(zhí)行上面的代碼來(lái)重連接,就會(huì)報(bào)這個(gè)錯(cuò)誤。
這說(shuō)明連接已經(jīng)關(guān)閉了。連接關(guān)閉了就不能再調(diào)用ws.send了,否則會(huì)有這個(gè)報(bào)錯(cuò)。比如連接關(guān)閉了要把你js里定時(shí)發(fā)送心跳的定時(shí)器刪除,它引用的ws仍然是舊的連接對(duì)象,連接端口后定時(shí)器仍然執(zhí)行 ws.send({type:'heartbeat'});
的時(shí)候就會(huì)出現(xiàn)WebSocket is already in CLOSING or CLOSED state.
這個(gè)錯(cuò)誤了。onclose的時(shí)候你要把定時(shí)器刪除