簡體   English   中英

如何在沒有數據庫的情況下顯示當前在線用戶? 或至少非常有效。 最好在PHP中

[英]How can I display currently online users, without a database? Or at least very efficiently. Preferably in PHP

對於我來說,這個問題已經有一段時間了。 抱歉,如果我寫了很多東西,我只是想弄清楚我已經嘗試過的內容,等等。

我將盡可能簡單地解釋我的問題的想法,因為復雜性是無關緊要的。 我們網站上隨時可能有多達80-90個用戶。 他們可能都將訪問同一頁面,我將其稱為result.php。 他們將通過ID的get變量(result.php?ID = 456)訪問不同的結果。 在任何一次記錄上,少於3個或4個用戶很可能會出現,並且有10000條以上的記錄。

我需要知道,在該頁面上該特定ID上的錯誤發生的時間少於20-25秒(這非常重要),並相應地更新該頁面。 一旦不再在頁面上刪除他們的名字,請盡快刪除。

目前,我正在使用一個jQuery腳本來調用php文件,並從數據庫中讀取正在訪問此特定ID的“當前正在訪問”用戶名,並且僅當他們訪問該文件的日期在最近25秒之內。 該文件還將刪除所有早於5分鍾的條目,以保持表格整潔。

對於20或30個用戶來說,這還不錯,但是現在負載增加了一倍以上,我注意到這是一種特別慢的方法。

我還可以使用哪些其他方法? 有沒有人有過類似情況的經驗?

我們目前使用的所有內容都使用PHP編寫,並帶有一些jQuery。 如果重要的話,我們正在由托管公司在異地管理的服務器上運行。

我遇到了一種稱為Comet或Comet Server的東西,聽起來像可能有幫助,但對於我來說,聽起來也非常復雜,目前遠遠超出我的理解。

查看websockets以獲取實時套接字連接。 您可以使用websocket實時(而不是輪詢)推送更新,以確保“當前在線用戶”的更改在毫秒內發送。

您需要的是帶有服務層的內存中緩存,用於維護站點上的活動狀態。 使用memcached可能是一個不錯的起點。 您的偽代碼將類似於:

  • 在頁面訪問中,調用CurrentUserService
  • CurrentUserService將您正在訪問的頁面以及您的身份作為參數。
  • 每次調用它時,它都會從緩存中刪除您之前訪問的內容。
  • 然后添加您當前正在訪問的內容。
  • 然后,它根據緩存中的當前狀態,匯編一個列表,列出誰在訪問同一對象。
  • 它返回此列表,頁面將對其進行處理和顯示。

如果您記錄某人訪問頁面的時間,則可以為服務停止“計數”他們訪問頁面的時間設置超時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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