第一篇文章 有點小激動 PHP 輪詢方面的知識

大約在冬季發表於2018-01-31

歡迎指教
對於很多沒有支援 websocket 的網站應用來說 寫一些需要長輪詢的應用時是一個很蛋疼的事情
例如 微信登入
微信登入需要一個長輪詢去請求得到使用者有沒有掃描二維碼
如果一直ajax 輪詢請求 時間一長 瀏覽器就會變的很卡 可以考慮 休眠的方式來解決
下面是程式碼

$file_name = './test.txt';  // 此處建議使用 redis 或者其他的 快取 儘量不使用資料庫來掃描結果

for ( $i = 0; $i < 30; $i++ ) {
    $text = file_get_contents($file_name); //演示 使用檔案來儲存掃描結果

    if(!empty($text)){
        file_put_contents($file_name, ''); //為了更好的演示 這裡每次有結果之後 將檔案寫為空

        exit(json_encode(['status' => 1, 'msg' => $text]));
    }

    if($i > 28){
        exit(json_encode(['status' => 0, 'msg' => '繼續下一輪長輪詢!']));
    }

    usleep(2000000);
}

上面的閾值自己定義 自己驗證過是可以的

有什麼不對的地方 歡迎指教