2011-02-23 21 views
0

我對ajax,php和mysql非常陌生。我認爲我正在做一些非常不可擴展的事情,並且希望在正確的方向上有所作爲。使用Ajax和mysql的計時器

現在我在我的網站上有一個計時器,它使用ajax獲取包含時間的頁面。有時間的頁面在請求時查詢我的mysql數據庫中的「目標」時間,並比較「目標時間」和當前時間(使用time())之間的差異。 Ajax設置爲1000毫秒的時間間隔。有時會跳過用戶的秒鐘。

所以現在,對於每個用戶,我的MySQL服務器每隔一秒就會被查詢。有沒有一種方法,只有被Ajax retreived的頁面每秒查詢mysql服務器,然後值被保存,用戶只需查詢該頁面上的值...我希望這是有道理的。

我想做什麼:每隔一秒鐘查詢我的MySQL服務器以獲取時間,並根據請求向用戶提供此頁面。 = 1(mysql查詢)x 1000(由ajax檢索的頁面)工作(給出1000個用戶)

我現在擁有:ajax每秒查詢我的mysql服務器的頁面。 = 1000(mysql查詢)x1000(由ajax檢索的頁面)工作(給定1000個用戶)。

此外,什麼是適當的時間間隔來設置它? 500毫秒?

+0

據我所知,你希望PHP腳本在後臺不斷運行,並使用AJAX獲取輸出而不是觸發它。整個過程在您的服務器上聽起來非常艱難。你可以一次獲得「目標時間」,而循環setTimeout每1000毫秒減少一秒?您可以定期通過AJAX登錄以重置並補償任何不一致情況。 – tkm256 2011-02-23 04:05:40

+0

@ tkm256,我真的需要他們檢查每一秒,以便每個人都同步。聊天室中的所有參與者都將看到一整天不同的倒數計時器 – 2011-02-23 04:10:58

回答

0

頁面首次加載時,可以設置一個javascript變量,其數據由PHP time("U");設置,該變量是服務器現在的unix時間戳。

然後,當頁面呈現,減去客戶UNIX時間:

var foo = new Date; // Generic JS date object 
var unixtime_ms = foo.getTime(); // Returns milliseconds since the epoch 
var unixtime = parseInt(unixtime_ms/1000); 

給你一個int,你叫delta。現在僅使用javascript(無ajax),您可以設置1秒計時器更新時間,以delta爲基礎進行計算。