有一个场景,web站点有一个微信登录的功能,我们都知道登录流程如下,简单画了一下。。
常见的做法是短链接,二维码显示之后,定时任务每秒执行一次,也即重复a和b两部
这里使用一种方法,利用redis的发布订阅机制实现服务器推技术,也即二维码显示之后,立马发起请求,web服务器拿到请求之后向redis订阅一个信息,这里就用二维码的标识作为订阅的标识,可以根据场景设置好订阅的超时时间,且配合前后端超时时再次发起请求。当用户扫描微信二维码之后,此时微信服务器会通知我们的服务器,并把相关参数传过来,我们就可以做处理。告诉浏览器哪个二维码被用户扫过。。思路很清晰
下面废话不多说,先模糊这种场景,代码如下
sub.php脚本
$redis = new Redis();
$redis->connect('localhost',6379);
$redis->auth("1234567890");
//相关操作
$channel = "yybbll"; // 比如微信二维码的标识
$redis->subscribe(array($channel), 'callback');
function callback($instance, $channelName, $message) {
echo $channelName, "==>", $message,PHP_EOL;
exit;
}
下面就可以到redis的客户端shell操作
只需写入发布指令
publish yybbll "Redis is a great caching technique"
sub.php脚本需要先运行,后执行发布指令,则脚本输出Redis is a great caching technique
其实微信登录与这个原理是一样的。希望有帮助,一起学习。。。