【已解决】gateway-worker的onClose得不到$_SESSION数据

fantasmic

问题描述

发送消息如果不走进判断里关闭连接时可以获得$_SESSION数据,但进判断里就得不到了。

public static function onMessage($client_id, $message)
{
    $msg = json_decode($message,1);
    $_SESSION['closeFlag'] = 123;
    if(!is_array($msg)){
        Gateway::closeClient($client_id);
    }
}

public static function onClose($client_id)
{
    echo "关闭gateway :{$_SESSION['closeFlag']} \n";
}
489 1 1
1个回答

walkor 打赏

$_SESSION['closeFlag'] = 123;这种不是实时生效的,在onMessage执行完毕后才会通知Gateway进程进程设置SESSION
但是因为你在onMessage里调用了Gateway::closeClient($client_id),这个接口是同步的,会立刻通知Gateway进程关闭连接。这就导致onMessage执行完毕后连接已经不存在了,SESSION无法生效。onClose里自然拿不到对应的SESSION。

$_SESSION['closeFlag'] = 123; 改成 Gateway::updateSession($client_id, ['closeFlag' => 123]);,这个接口调用是同步的,会立刻通知到Gateway进程设置SESSION

×
🔝