如何获取 JavaScript WebSocket 连接的当前状态

85

有时候当我重新启动服务器或出现网络故障时,WebSocket 会关闭,我希望能够始终获取当前的连接状态。

基本上我正在遇到以下错误,我想要能够预测它:

WebSocket is already in CLOSING or CLOSED state. 
    (anonymous function) 
    InjectedScript._evaluateOn 
    InjectedScript._evaluateAndWrap 
    InjectedScript.evaluate
1个回答

152
这很简单:websocket的readyState属性始终包含websocket的连接状态,如WebSocket API中所指定。
它将是以下值之一:CONNECTING OPEN CLOSINGCLOSED 解决错误的方法可能是像这样:
if (yourWsObject.readyState !== WebSocket.CLOSED) {
   // Do your stuff...
}

9
API的正确答案是:即使您未连接,yourWsObject.readyState将显示为1(OPEN)。 我已在Android模拟器上使用远程后端进行测试。在关闭笔记本电脑的WiFi并尝试从模拟器连接到远程套接字服务器后,readyState仍然显示为OPEN。请注意,此信息仅供参考,不得作为技术指南或建议。 - Blue Bot
2
socket.readyState !== WebSocket.CLOSED && socket.readyState !== WebSocket.CLOSING ? true : false; 套接字.readyState !== WebSocket.CLOSED && 套接字.readyState !== WebSocket.CLOSING ? true : false; - Alex
@BlueBot - 正确 - kta
2
另一个选项可能是自己维护一个布尔值,onopen -> trueonclose -> false - Eric
@BlueBot正确,只要不遇到错误或关闭的情况,它将显示"OPEN"。因此,我设置了每10秒检查一次是否更改为"OPEN"状态, 并使用AppState.addEventListener('change');监听应用状态的变化,如果先前的状态不是活动状态而新状态是活动状态,则强制重新连接。 - user2573099
我建议使用(yourWsObject.readyState == yourWsObject.OPEN),因为有时候你无法预测脚本会做出什么疯狂的动作,在连接时发送消息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接