关于关闭问题

纵横

我做的是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这个组整体注销呢??

2276 1 0
1个回答

walkor

多一个说明之前的连接没关闭,或者说服务端没收到客户端发送的关闭连接的fin包。
可能是ws.close没运行,或者运行了没起作用(没发送fin包给服务端)。
服务端没收到fin包,就不会调用onClose,就不会把对应client_id从uid解绑。

上面只是猜测,建议每一步(ws.close onConnet onClose等)都打日志看看确定原因,服务端也抓包看看客户端是否发了fin包过来。抓包方法workerman手册有。另外去看下gatewayWorker手册心跳部分。

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