簡體   English   中英

離線/在線狀態PHP的基本輪詢協議

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM