[英]Basic polling protocol for offline/online status PHP
我需要一種解決方案來確定我網站的每個用戶的在線/離線狀態。 我的網站是一個單一頁面,沒有任何可單擊的鏈接,等等,並且在大多數情況下,用戶只是簡單地將選項卡保持打開狀態很長時間,而無需執行任何操作。 用戶下線的時間不需要太精確地確定,也許在他們實際下線的大約十分鍾之內。
由於這些條件,我無法使用數據庫解決方案來檢測帶有時間戳的用戶不活動,並且我需要使我的網站盡可能多地受瀏覽器和版本的訪問,因此Web套接字可能不可行。 Javascript的“ onunload”和“ unload”事件似乎無法接收諸如系統意外關閉等事件,因此不夠准確。
我感興趣的是在索引頁面中設置某種長輪詢腳本,該腳本將每隔一段時間向PHP腳本發送一個信號,以使服務器知道用戶仍在“活躍”並正在使用該頁面。
我需要編寫代碼的幫助,有人可以幫忙嗎? 我主要在用PHP來實現一個“監聽器”。
PS我不確定它是否會更改任何內容,但是一旦確定用戶處於脫機狀態,我需要運行一個已經編寫的小型PHP腳本,該腳本將從JSON文件中刪除一些相應的數據。
PHP在服務器端,並且PHP不可能知道此頁面上正在發生什么。 您可以使用該時間,並在閑置5分鍾后將用戶設置為離線。 但是,由於頁面上沒有可單擊的鏈接,因此很難跟蹤活動。
一種選擇是在頁面上使用JavaSript,該頁面每5分鍾與服務器聯系一次,以使您知道該頁面仍在客戶端瀏覽器中打開。 即使用戶沒有主動查看您的頁面,這也將起作用。 您可以走得更遠,檢測頁面上是否設置了用戶焦點。 因此,跳出來會使他們失去對頁面的關注。
遵循MadeInDreams和Sheepherder的建議,我找到了滿足自己要求的解決方案。
間隔觸發Ajax調用以在index.php中發送“仍然存在”信號:
<script type="text/javascript">
function ping() {
$.ajax({
type: "POST",
url: 'json_update.php',
data: ({signal:"1"}),
success: function(data) {
handleData(data);
}
});
}
setInterval(ping, 60000);
</script>
在json_updater.php中:
if($_POST['signal'])
{
// update timestamp for user in json file from calling time() function.
json_maintainer.php:
// this script is called by a chron job on the server every 1 minute.
// it deletes all json entries with a timestamp which is older than time() -
120.
這似乎是非常准確的。 為了以准確性為代價減少負載,可以相應地調整ping頻率和垃圾收集。
由於json文件可能同時被兩個腳本寫入,因此需要適當的文件鎖定以防止數據損壞。 如果正在使用數據庫系統,則排隊機制可以解決此問題,並且該問題將不適用。
如果您的頁面是php頁面,則可以收集訪問者的IP地址或計算機名稱,並將其存儲在瀏覽器訪問您的網站時存儲在數據庫中。 然后將其設置為每分鍾更新一次該數據。 列將是id,user,userlive。
userlive將每分鍾更新一次,其中user ='ip或computer name'。
您將按日期時間或時間戳或您的選擇進行更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.