發(fā)送消息如果不走進判斷里關閉連接時可以獲得$_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";
}
$_SESSION['closeFlag'] = 123;
這種不是實時生效的,在onMessage執(zhí)行完畢后才會通知Gateway進程進程設置SESSION
但是因為你在onMessage里調用了Gateway::closeClient($client_id),這個接口是同步的,會立刻通知Gateway進程關閉連接。這就導致onMessage執(zhí)行完畢后連接已經不存在了,SESSION無法生效。onClose里自然拿不到對應的SESSION。
$_SESSION['closeFlag'] = 123;
改成 Gateway::updateSession($client_id, ['closeFlag' => 123]);
,這個接口調用是同步的,會立刻通知到Gateway進程設置SESSION