我目前正在使用einaros的NodeJS WS模块来创建websocket客户端。初始化套接字客户端时,我使用"open"事件来确定连接何时打开,但是一旦打开,我将如何检查它是否仍然打开?
"WebSocket"对象上是否有可用于快速检查套接字状态的属性?
是 - websocketInstance.readyState - 足够吗?
socket.readyState
会告诉你套接字认为它的状态是什么。 没有其他比socket.readyState
更准确的属性可以咨询。
如果您想知道套接字何时完成连接并且现在被视为打开,则可以为 open
事件注册事件处理程序。 这将告诉您何时完成连接。
如果要在套接字关闭或遇到错误时收到实时通知,则可以对error
或close
事件使用事件侦听器。 close
事件仅表示套接字正在关闭,socket.readyState
值现在更改为关闭。
检查套接字的一种更可靠的方法是首先检查socket.readyState
,如果说套接字是打开的,那么您可以将测试数据包发送到另一端,只有当您从测试数据包获得响应时,您才会真正知道套接字是可操作的。
socket.io
库(构建在webSockets之上(正是这样做的,发送定期的保持活动数据包并侦听响应。 如果它经过一段时间没有响应,那么它将关闭现有套接字并尝试重新建立新连接(计算先前的连接以某种方式丢失(。 通过这种方式,socket.io
库甚至可以在服务器重新启动或客户端互联网连接暂时下降的情况下幸存下来,因为它会看到连接丢失,然后透明地在其位置重新建立新连接。
您应该注意错误并断开回调。这样,您将在关闭时收到通知。