php socket-io我count($io->worker->connections)数字比实际用户连接超出好多。

在线统计用户就100多个人,但连接却有1300多个,连接不是自动销毁的么,如果客户端非正常断开链接会残留的么。是不是要加心跳。socket-io的心跳要怎么加。。。
已邀请:

keytehu

赞同来自:

因为有些用户开了多个页面多个连接吧

ChasenTsai

赞同来自:

长连接必须加心跳的呀。
至于怎么加,实现方式有很多的。
比如服务端 on connection 的时候设置一个定时器,每 30 秒查询上次心跳时间,如果超过一定时间,则判定用户已离线,将其 disconnect。
而客户端 on connect 的时候也设置一个定时器,每 29 秒发送一个心跳指令。服务端收到之后更新心跳时间。

maq

赞同来自:

sockeio 在客户端连接的过程中,一般会发起好几个网络连接(HTTP 请求),最终会得到并保持一个 WebSocket 长连接,这个长连接是有 ping 的,所以应该不存在残留的问题。

$io->worker->connections 并不严格对应每个客户端,如果你的客户端频繁重连 socketio 的话,产生的网络连接数是会多一些的。不过你这个也多太多了……

maq

赞同来自:

你可以试试 count($io->of('/')->sockets) 看看结果如何,这个应该更接近真实的在线客户数。

要回复问题请先登录注册