PHP人員在線離線設計

最近開發有這樣的需求,但php又不擅長處理多進程任務,顧嘗試找一些解決方案。

我知道的方法可能可以用的有一下幾種:

1,可以用Linux crob定時任務+php腳步似乎可以實現,但如果用戶比較多的話,也

不怎麼好 處理。

2,另外就是ignore_user_abort();//函數,連接斷開後可以繼續執行,但來做多用戶在線離線,好像還是有問題的。網上流行的一段代碼就是:

<?php
ignore_user_abort();//關掉瀏覽器,PHP腳本也可以繼續執行.
set_time_limit(3000);// 通過set_time_limit(0)可以讓程序無限制的執行下去
$interval=5;// 每隔5s運行
  
//方法1--死循環
do{
  echo '測試'.time().'<br/>';
  sleep($interval);// 等待5s 
}while(true);
  
//方法2---sleep 定時執行
  require_once './curlClass.php';//引入文件
    
  $curl = new httpCurl();//實例化
  $stime = $curl->getmicrotime();
  for($i=0;$i<=10;$i++){
      
    echo '測試'.time().'<br/>';
    sleep($interval);// 等待5s
      
  }
  ob_flush();
  flush();
  $etime = $curl->getmicrotime();
  echo '<hr>';
  echo round(($etime-stime),4);//程序執行時間
3,通過session機制,應該也可以,但如果是手機的話,session就有點尷尬了。
4,還有就是可以通過別的語言來實現,數據庫共享就可以,反正都是自己開發。c++首選,但不到萬不得已,也不願意在php項目中去再用c++開發一個東西,會被那些人噴死的。
最後網上找了下,感覺下面這個方案應該還可以,基本不存在什麼原理性的問題,手機終端和瀏覽器通用,歡迎大家一起研究討論:

因爲登陸可以統計,但是人家不退出登陸,而是直接關閉瀏覽器,你這程序還會繼續認爲他在線。
簡單的方法是用文件來存儲,


用戶登錄的時候,生成一個緩存文件,比如當前用戶的id爲10,
那麼,生成的文件的名稱爲 $fileName = ‘10_’.tme()+600;
後面的部分是到期時間,默認是10分鐘以後過期,
當用戶訪問的時候,你通過glob函數,找出這個文件,刪除,然後生成一個新的文件,文件是當前時間後推10分鐘。用戶如果退出登錄,就直接刪除這個文件。
也就是說,用戶操作一次,這個文件的時間就刷新一次。


統計的時候只要遍歷所以文件,找出所有到期時間大於當前時間的文件的數量即可,此方法不僅可以統計,也可以列舉出在線的都是誰。
時間不一定是10分鐘,可以任意取,也就是超過多少時間無動作就默認當作下線。
文件存儲地址可以用hash分組。

發佈了157 篇原創文章 · 獲贊 79 · 訪問量 88萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章