我正在構建一個用於監控私人聊天室的後端模塊(用PHP編寫),該聊天室對於[完全] 300秒(5分鐘)沒有任何活動。如果是,腳本將更新數據庫(將最大用戶數設置爲某個數字,以及其他內容)。我正在通過now()和上次發送的消息的時間差來監視空閒時間的跨度。PHP連續檢查數據庫更改的最佳做法是什麼?
我做了什麼:設置一個cron作業,每分鐘或60秒將運行(通過php-cli)我的監視腳本。裏面的監控腳本:
$expire_time = time() + 60;
//this loop will run for 60 seconds
while(time() < $expire_time)
{
$idle_time = get_all_chatrooms_idle_time();
foreach($idle_time as $s_time)
{
if($s_time >= 300)
{
update_changes();
}
}
usleep(500000);
}
的空閒時間立即設置最大用戶後經過300秒的條件,不能討價還價。所以我不能真正遵循這樣的建議:「避免做任何事情,直到事實上要求它」,即使它很有意義。
原因?活動和不活動聊天室的數據需要實時,因爲它也會顯示在儀表板上。聊天室版主的薪水取決於它。
爲什麼不檢查他們每個儀表板的負載?我很抱歉,但仍然不可能。
檢查需要服務器端,儀表板使用ajax進行更新,每秒進行一次輪詢。
當我裝上監控代碼的頁面被請求我的Ajax調用我覺得它比我目前的執行佔用更多的資源(糾正我,如果我錯了)
讓我給你上號了一些粗略的估計用戶的所以你可以想象負載/流量我們得到:
- 數聊友,包括主持人:〜800
- 號聊天室:〜250
- (x)的聊天室版主的數量:〜 50
- (X)我的老闆和他的員工:
(X) - 可以查看儀表板
有沒有更好的辦法?我做對了嗎?
好像你做錯了。有沒有聽說過CRON工作?我認爲上帝的做法是每隔1分鐘(或更少)設置cron作業?這將使用select運行簡單的MySQL腳本。 – Stranger
可能的重複http://stackoverflow.com/questions/4834829/php-long-polling-without-excessive-database-access –
@Stranger我做過了嗎? – yowmamasita