Node JS - 你如何判断一个套接字是不是已经使用 Einaros WS 套接字模块打开?
Posted
技术标签:
【中文标题】Node JS - 你如何判断一个套接字是不是已经使用 Einaros WS 套接字模块打开?【英文标题】:Node JS - How Can You Tell If A Socket Is Already Open With The Einaros WS Socket Module?Node JS - 你如何判断一个套接字是否已经使用 Einaros WS 套接字模块打开? 【发布时间】:2014-12-02 18:28:54 【问题描述】:我目前正在使用 einaros 的 NodeJS WS 模块来创建 websocket 客户端。 初始化套接字客户端时,我使用 'open' 事件来确定连接何时打开,但是一旦打开,我如何检查它是否仍然打开?
“WebSocket”对象上是否有可以用来快速检查套接字状态的属性?
是否 - websocketInstance.readyState - 是否足够?
【问题讨论】:
if (socket.readyState === 1)
然后系统认为套接字仍然打开。您可以获得的唯一更好的保证是发送消息并等待响应。
如果你想知道readyState何时变为close,你也可以监控onclose事件。
@jfriend00 有时是onclose
is never fired
@TheSexiestManinJamaica - 阅读下面我回答的最后一段。
【参考方案1】:
socket.readyState
会告诉你套接字认为它的状态是什么。没有其他比socket.readyState
更准确的属性可供您参考。
如果您想知道套接字何时完成连接并且现在被认为是打开的,那么您可以为open
事件注册一个事件处理程序。这将告诉您何时完成连接。
如果您希望在套接字关闭或遇到错误时获得实时通知,您可以使用事件侦听器来处理 error
或 close
事件。 close
事件仅表示套接字正在关闭,socket.readyState
值现在变为已关闭。
一种更能保证是最新的检查套接字的方法是首先检查socket.readyState
,如果这表明套接字是打开的,那么你可以发送一个测试数据包到另一端,并且只有当你从测试数据包中得到响应,您是否真正知道套接字是可操作的。
socket.io
库(建立在 webSockets 之上)正是这样做的,它发送定期保持活动的数据包并侦听响应。如果它在一段时间内没有响应,那么它将关闭现有的套接字并尝试重新建立一个新的连接(认为先前的连接以某种方式丢失了)。通过这种方式,socket.io
库甚至可以在服务器重新启动或客户端 Internet 连接暂时中断的情况下幸存下来,因为它会看到连接丢失,然后透明地在其位置重新建立新连接。
【讨论】:
这对我来说有点太抽象了。如果您能给我看一些实际的 nodejs 代码,我将不胜感激。因此,假设我想查看 localhost 端口 5858 上是否有侦听器。我将如何编写一个函数,如果存在则返回 true,否则返回 false?谢谢。 @rocky - 这与这里提出的问题不同。我建议您自己提出一个新问题,询问您的具体情况。您可以在评论中链接此处的新问题,我会在您发布后查看。【参考方案2】:我认为您应该注意错误并断开回调。这样你就会在它关闭时收到通知。
【讨论】:
以上是关于Node JS - 你如何判断一个套接字是不是已经使用 Einaros WS 套接字模块打开?的主要内容,如果未能解决你的问题,请参考以下文章