我目前正在使用einaros的NodeJS WS模块来创建websocket客户端。 在初始化套接字客户端时,我使用'open'事件来确定连接何时打开,但一旦打开,我怎么能检查它是否仍然打开?
'WebSocket'对象上是否有可用于快速检查套接字状态的属性?
是 - websocketInstance.readyState - 足够吗?
答案 0 :(得分:12)
socket.readyState
会告诉你套接字的状态是什么。没有其他更准确的属性可以咨询socket.readyState
。
如果您想知道的是套接字何时完成连接并且现在被认为是打开的,那么您可以为open
事件注册一个事件处理程序。这将告诉您何时完成连接。
如果您希望在套接字关闭或遇到错误时进行实时通知,则可以使用事件侦听器来执行error
或close
事件。 close
事件只表示套接字正在关闭,socket.readyState
值现在更改为已关闭。
更有保证是检查套接字的最新方法是首先检查socket.readyState
,如果说套接字已打开,那么您可以将测试数据包发送到另一端并且仅当你从测试数据包中得到回复时,你真的知道套接字正在运行。
socket.io
库(建立在webSockets之上)就是这样做的,发送常规的keep-alive数据包并监听响应。如果它在没有响应的情况下持续一段时间,那么它将关闭现有套接字并尝试重新建立新连接(计算先前的连接以某种方式丢失)。通过这种方式,socket.io
库甚至可以在服务器重启或客户端Internet连接暂时中断后继续存在,因为它将看到连接丢失,然后透明地重新建立新连接。
答案 1 :(得分:1)
我认为您应该注意错误并断开回调。这样,当您关闭时,您会收到通知。