我做的是app聊天,
app调用的时候,根据当前会员的mid注册的
Gateway::bindUid($client_id, $msg);
app挂起的挂起的时候(切换到桌面,或者关闭屏幕) 当前链接需要关闭
我在app里面调用的是ws.close()
对应到Events.php里面的
public static function onClose($client_id) {
// 向所有人发送
//GateWay::sendToAll("$client_id logout");
if($_SERVER==10002)
{
Gateway::closeClient($client_id);
echo "client_id:{$client_id}\n";
}
}
现在的问题是我每次进入挂起在回复 发现 Gateway::getClientIdByUid($msg) 数组就多一个值, 能不能把uid这个组整体注销呢??
多一个说明之前的连接没关闭,或者说服务端没收到客户端发送的关闭连接的fin包。
可能是ws.close没运行,或者运行了没起作用(没发送fin包给服务端)。
服务端没收到fin包,就不会调用onClose,就不会把对应client_id从uid解绑。
上面只是猜测,建议每一步(ws.close onConnet onClose等)都打日志看看确定原因,服务端也抓包看看客户端是否发了fin包过来。抓包方法workerman手册有。另外去看下gatewayWorker手册心跳部分。