会有什么原因会让websocket已经建立的connection数量减少?

zhouaini528

应用场景:
我采用websocket的方法连接对方的服务,对方的服务是以用户登录的方式连接。即我每多一个connection都是一个普通的用户登录连接状态。由于网络的问题或者对方服务器鉴权问题,我每隔4小时把所有的用户连接断开$con->close()方法,然后通过onClose事件等待10秒重新连接。

出现的问题:
每个用户connection我都做了一个timer监听它与对方服务器的连接状态,而且我也在connection设置单独的属性。过了一段时间~通常会1天以上~会出现connection消失,我是通过server.php status 查看当前整个服务的状态,发现connection全部没有了。但是每个connection timer监听还在,但是已经无法获取之前的属性等等一些列数据了。

worker_name为none的用户连接会消失。比如现在是2个用户~过段时间就会丢失2个变为0。 请问这是什么原因??我查找了很久很久了,也不知道如何下手查找了?请求帮助!

我现在是这样测试的~我手动通过$con->close()断开连接,它会自动触发onClose事件,但是我这个时候不重连它(不使用$con->reConnect()方法), 我status看了connection并没有减少数量。 我接下来应该如何排查?

1333 1 0
1个回答

six

connections 表示当前未断开的连接数,如果某个连接断开了,连接对象销毁了,connections就相应减1。
如果connections为0,说明连接都断开了。至于定时器还在,是因为断开连接后没删除定时器,连接和定时器是2个不同的东西,连接断开了定时器还是一直存在的。你应该在连接onclose的时候删除定时器。

  • zhouaini528 2021-08-18

    谢谢你的解答。 我现在是这样测试的~我手动通过$con->close()断开连接,它会自动触发onClose事件,但是我这个时候不重连它, 我status看了connection并没有减少数量。 我接下来应该如何排查?

  • zhouaini528 2021-08-18

    我没有通过$con->reConnect();这个方法。但是connection并没有减少数量

  • six 2021-08-18

    定时器里引用了$connection对象,导致$connection对象没有释放。把定时器删除了估计就释放了。

年代过于久远,无法发表回答
🔝