wuqinqiang
- wuqinqiang 赞了回答
swoole的websocket握手有默认机制,但你也是能有机会附加操作的(onHandShake回调中,你一样能像HTTP那样加自定义Header或者path_info的方式携带额外数据),这是你可以验证用户身份的第一次时机;
第二次时机,连接成功后,客户端用你自己约定的方式发token给服务器(rpc、json....),完成验证(Who am i)。
验证后绑定:$server->bind($fd,$uid)绑到connection_info上,之后随时能$Server->getClientInfo()取回uid。 - wuqinqiang 回复了 immusen 的回答
Yii::$app->user->identity
里的 user 默认是yii\web\user
,
在swoole的worker里面运行的话:一般的做法是重写yii\web\user的login
方法,改成不依赖cookie(至于依赖什么,得看你在websocket登录的解决方案,有各种变通、组合方案,说来话长),然后确保在你Yii::$app->user->identity
之前调用过login;
中级做法是uid绑fd,然后根据业务需求拿uid操作缓存、数据库;
高级的做法是用swoole会话期对象在会话期保持机制...
还挺好玩儿的..改天我做一个Demo..比如现在我用token来验证用户,服务器端开启监听端口,客户端先进行用户认证,认证成功,那我客户端开启一个websocket服务,当他开启服务的时候,端和端之间三次握手,建立连接,这个连接是在内核中完成的。和应用层没有关系,如果用户认证使用的是token,那我应该是在连接还未完成时进行token认证,我还需要进行fd和用户的关系映射,fd是在连接完成,生成一个用于之后的所有关于消息广播等等。问题就是我们根本不用关注他的三次握手以及连接,你说的uid和fd的绑定是在哪个流程中,连接的时候我们并没有传递用户信息啊,连接的过程对我们来说是空白的
- wuqinqiang 回复了 wuqinqiang 的说说
关于swoole结合yii的问题
问题在这:https://www.yiichina.com/question/4161 - wuqinqiang 回复了 wuqinqiang 的说说
关于swoole结合yii的问题
我现在是使用yii登陆机制,在登陆成功以后客户端再开启websocket服务,进行连接,连接之后websocket触发open,我在这里进行登陆用户和fd的映射, - wuqinqiang 发表了说说关于swoole结合yii的问题
- wuqinqiang 赞了说说用php从0开始刷Leetcode,喜欢给个star:https://github.com/wuqinqiang/leetcode-php
- wuqinqiang 回复了 wuqinqiang 的说说
用php从0开始刷Leetcode,喜欢给个star:https://github.com/wuqinqiang/leetcode-php
GitHub地址:https://github.com/wuqinqiang/leetcode-php - wuqinqiang 发表了说说用php从0开始刷Leetcode,喜欢给个star:https://github.com/wuqinqiang/leetcode-php
12345