直接贴代码
/**
* 当客户端连接上gateway完成websocket握手时触发的回调函数。
* @param client_id 来自注册中心的连接ID
* @param data 连接的相关数据
* @return void
*/
public static function onWebSocketConnect($client_id, $data)
{
//检测Cookis中是否有sessionId 如果没有则踢下线;
//建议还可以顺带拉黑掉ip我是还在测试所以还没写
//拉黑ip建议在nginx中检测就不要让他转发到webman中了
$name = config('session.session_name');
if (empty($data['cookie'][$name])) {
Gateway::closeClient($client_id);
}
// $session 变量就是你在webman中的通过请求类获取到的session类
// 等同于 在webman中的 $request->session();
//但是也不完全一样 如果sessionId不存在也不会自动创建
$session = new \Workerman\Protocols\Http\Session($data['cookie'][$name]);
if (empty($session->all())) { //验证是否session是否有数据
Gateway::closeClient($client_id);
}
}
有点裂开,没有办法么
感觉是木有办法的,GatewayWorker 和 webman 是两种工作协议,客户端连接是不同的
用redis,webman使用redis,然后gatewayworker也使用redis读取就行了。
webman下手动获取 当前用户session资源集
推荐
我是用的redis我确实是可以获取到数据集,但是用哪个类解析数据集是个问题
webman中解析数据集的类我没找到有大佬找到的跟我说一下
你可以在群里提,这里不方便细聊
等群里大佬帮解决了,也来这里分享更进下,让其他人方便
拿到sessionid后,直接 new \Workerman\Protocols\Http\Session($session_id); 就能拿到session了吧。
不这个不是解析数据的类这个是整个seeion类其中有可能调用到了请求类的东西会有问题的
看了源码,貌似没啥耦合,可以直接用。解析数据用的php自带的serialize 和 unserialize函数,没有用到什么解析数据类
嗷嗷谢谢大佬
解决了写到帖子里面了