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

liulingyin

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

3211 4 0
4个回答

keytehu

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

  • liulingyin 2018-03-26

    我这个是游戏服务器。。正常来说一个用户只对应一个连接

ChasenTsai

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

  • liulingyin 2018-03-26

    好的,谢谢我试下

  • ChasenTsai 2018-03-26

    既然你是游戏服务器,那么应该涉及到时间误差校准吧?我的项目中就是把时间校准当成心跳用

maq

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

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

  • 暂无评论
maq

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

  • 暂无评论
年代过于久远,无法发表回答
🔝