有一個場景,web站點有一個微信登錄的功能,我們都知道登錄流程如下,簡單畫了一下。。
常見的做法是短鏈接,二維碼顯示之后,定時任務(wù)每秒執(zhí)行一次,也即重復(fù)a和b兩部
這里使用一種方法,利用redis的發(fā)布訂閱機制實現(xiàn)服務(wù)器推技術(shù),也即二維碼顯示之后,立馬發(fā)起請求,web服務(wù)器拿到請求之后向redis訂閱一個信息,這里就用二維碼的標(biāo)識作為訂閱的標(biāo)識,可以根據(jù)場景設(shè)置好訂閱的超時時間,且配合前后端超時時再次發(fā)起請求。當(dāng)用戶掃描微信二維碼之后,此時微信服務(wù)器會通知我們的服務(wù)器,并把相關(guān)參數(shù)傳過來,我們就可以做處理。告訴瀏覽器哪個二維碼被用戶掃過。。思路很清晰
下面廢話不多說,先模糊這種場景,代碼如下
sub.php腳本
$redis = new Redis();
$redis->connect('localhost',6379);
$redis->auth("1234567890");
//相關(guān)操作
$channel = "yybbll";? // 比如微信二維碼的標(biāo)識
$redis->subscribe(array($channel), 'callback');
function callback($instance, $channelName, $message) {
echo $channelName, "==>", $message,PHP_EOL;
exit;
}
下面就可以到redis的客戶端shell操作
只需寫入發(fā)布指令
publish yybbll "Redis is a great caching technique"
sub.php腳本需要先運行,后執(zhí)行發(fā)布指令,則腳本輸出Redis is a great caching technique
其實微信登錄與這個原理是一樣的。希望有幫助,一起學(xué)習(xí)。。。