Closed hhxsv5 closed 4 years ago
WebSocket的鉴权一般是通过在连接URL或Cookie上带上SESSION或Token来实现的,onOpen中就可以拿到Request来做鉴权判断;鉴权成功后可以需要将FD与用户ID做双向绑定,然后将绑定关系存储到Swoole Table、Redis等存储服务上;当收到客户端发来消息时,可以根据FD查出用户信息了;当客户端关闭连接时,同理也可以针对该用户做下线处理;当需要按用户广播时,可以遍历绑定关系列表,根据用户信息视情况广播。
双向绑定
目前都需要开发者自己实现保存FD与用户Id的绑定关系,像Swoole Table需要自己创建,绑定到$server上,然后再get/set,操作上还是比较麻烦,所以看有没有可能Swoole内置这样一个KV数据存储服务(连接级的数据存储功能),同时也支持通过用户Id反向查找FD,存储的值长度能支持配置项最好了。
保存FD与用户Id的绑定关系
使用 Swoole\Table 和 Redis 是正确的做法。底层实现也只是用这些 KV 存储而已
Swoole\Table
Redis
需求背景
WebSocket的鉴权一般是通过在连接URL或Cookie上带上SESSION或Token来实现的,onOpen中就可以拿到Request来做鉴权判断;鉴权成功后可以需要将FD与用户ID做
双向绑定
,然后将绑定关系存储到Swoole Table、Redis等存储服务上;当收到客户端发来消息时,可以根据FD查出用户信息了;当客户端关闭连接时,同理也可以针对该用户做下线处理;当需要按用户广播时,可以遍历绑定关系列表,根据用户信息视情况广播。问题与提议
目前都需要开发者自己实现
保存FD与用户Id的绑定关系
,像Swoole Table需要自己创建,绑定到$server上,然后再get/set,操作上还是比较麻烦,所以看有没有可能Swoole内置这样一个KV数据存储服务(连接级的数据存储功能),同时也支持通过用户Id反向查找FD,存储的值长度能支持配置项最好了。