直接貼代碼
/**
* 當(dāng)客戶端連接上gateway完成websocket握手時(shí)觸發(fā)的回調(diào)函數(shù)。
* @param client_id 來自注冊(cè)中心的連接ID
* @param data 連接的相關(guān)數(shù)據(jù)
* @return void
*/
public static function onWebSocketConnect($client_id, $data)
{
//檢測Cookis中是否有sessionId 如果沒有則踢下線;
//建議還可以順帶拉黑掉ip我是還在測試所以還沒寫
//拉黑ip建議在nginx中檢測就不要讓他轉(zhuǎn)發(fā)到webman中了
$name = config('session.session_name');
if (empty($data['cookie'][$name])) {
Gateway::closeClient($client_id);
}
// $session 變量就是你在webman中的通過請(qǐng)求類獲取到的session類
// 等同于 在webman中的 $request->session();
//但是也不完全一樣 如果sessionId不存在也不會(huì)自動(dòng)創(chuàng)建
$session = new \Workerman\Protocols\Http\Session($data['cookie'][$name]);
if (empty($session->all())) { //驗(yàn)證是否session是否有數(shù)據(jù)
Gateway::closeClient($client_id);
}
}
用redis,webman使用redis,然后gatewayworker也使用redis讀取就行了。
webman下手動(dòng)獲取 當(dāng)前用戶session資源集
拿到sessionid后,直接 new \Workerman\Protocols\Http\Session($session_id); 就能拿到session了吧。