Events::onClose
说明:
void Events::onClose(string $client_id);
客户端与Gateway进程的连接断开时触发。不管是客户端主动断开还是服务端主动断开,都会触发这个回调。一般在这里做一些数据清理工作。
注意:onClose回调里无法使用Gateway::getSession()
来获得当前用户的session数据,但是仍然可以使用$_SESSION
变量获得。
注意:onClose回调里无法使用Gateway::getUidByClientId()
接口来获得uid,解决办法是在Gateway::bindUid()
时记录一个$_SESSION['uid']
,onClose的时候用$_SESSION['uid']
来获得uid。
注意:断网断电等极端情况可能无法及时触发onClose
回调,因为这种情况客户端来不及给服务端发送断开连接的包(fin包),服务端就无法得知连接已经断开。检测这种极端情况需要心跳检测,并且必须设置$gateway->pingNotResponseLimit>0
。这种断网断电的极端情况onClose将被延迟触发,延迟时间为小于$gateway->pingInterval*$gateway->pingNotResponseLimit
秒,如果$gateway->pingInterval
和 $gateway->pingNotResponseLimit
中任何一个为0,则可能会无限延迟。
参数
$client_id
全局唯一的client_id
返回值
无返回值,任何返回值都会被视为无效的
范例
use \GatewayWorker\Lib\Gateway;
class Events
{
...
/**
* 当用户断开连接时触发的方法
* @param integer $client_id 断开连接的客户端client_id
* @return void
*/
public static function onClose($client_id)
{
// 广播 xxx logout
GateWay::sendToAll("client[$client_id] logout\n");
}
...
}