2011-11-09 84 views
1

我在尋找保持我的網站上用戶數近實時計​​算的最佳方法。這是在LAMP環境中,我想要構建一個在前端使用JavaScript並在後端使用PHP/MySQL的解決方案。我的最終目標是創建一個每個活動用戶都有記錄的MySQL表。現場活躍用戶數量

我目前收集這些信息的想法是簡單地在每個頁面上包含一段JavaScript,然後運行一個AJAX請求,然後爲該用戶創建記錄。爲了確保每個用戶都有一個獨特的記錄,我計劃爲每個用戶創建一個PHP會話。

我的問題是:如果我爲每個活動用戶創建一個php會話,如果存在例如1,000個連接的用戶,這會在普通VPS上導致性能問題嗎?是否有更好的方式爲每個用戶創建一個獨特的記錄(即爲用戶背後的NAT計費)而不創建PHP會話?

+0

在http://serverfault.com/上也可能會問這個問題 – DesignerGuy

+0

創建會話相當輕量。阿賈克斯心跳將是一個更大的問題。 –

+1

這可能值得閱讀:http://www.devarticles.com/c/a/PHP/The-Quickest-Way-To-Count-Users-Online-With-PHP/1/ – Smamatti

回答

1

除非你存儲在會話變量中的海量數據,任何標準的VPS應該能夠很容易地處理1K會議。默認情況下,PHP將會話存儲在磁盤上 - 如果您覺得磁盤I/O正在消耗腳本的速度,請考慮編寫自定義會話處理程序以將會話存儲在數據庫(如MySQL)中,以減少I/O滯後。如果你已經爲每個用戶在MySQL中存儲了一條記錄,這不是太多步驟。

0

我會在每分鐘更新的cron上運行它。

在您的用戶表中,您可以存儲頁面加載時更新的最後一個活動字段。如果最後一個活動字段超過5分鐘,則認爲它們已經不在線並且不在線。

因此,您的cron每分鐘計數上次活動時間少於5分鐘的用戶的數量,然後將其寫入一個簡單文件。就像js文件一樣,如果你願意的話也可以使用PHP。

通過這種方式,您可以對您的ajax調用該文件並獲得簡單的輸出,而不是每次請求都運行查詢。如果沒有真正的開銷,那麼用戶的數量應該是相當不相關的。

這也取決於您的需求。我假設你使用ajax調用,因爲你希望能夠增加屏幕上的實時數量,而不僅僅是每次頁面加載。

1

我發現獲取預計開放會話數的最簡單方法是計算session_save_path()返回的目錄中的文件數,它不是一段精確的科學,但很好地指示了那裏有多少個開放會話無需將會話保存處理程序更改爲數據庫或其他機制。

這個問題可能證明是有用的:Find Number of Open Sessions