2013-06-05 34 views
1

我目前需要幫助的同志在這裏。我正在開發基於php的應用程序開發,應用程序是quesionaire系統,當用戶已經啓動(點擊開始按鈕)時,系統有倒數計時器60分鐘。 到目前爲止,當用戶在會話登錄時,我可以將計時器推到數據庫,我每秒更新一次數據庫。而當前系統是當用戶註銷倒數計時器時將停止,例如30分鐘倒計時用戶註銷。所以當用戶登錄後仍然會得到30分鐘。當用戶關閉瀏覽器時,保持與數據庫mysql的通信

但我的客戶不喜歡它。我的客戶想要如果用戶已經點擊開始按鈕,倒數計時器將繼續直到60分鐘,即使用戶沒有註銷直到60分鐘或用戶關閉瀏覽器直到60分鐘。

那麼我的問題如何實現呢?用戶點擊按鈕啓動時我必須做什麼? 我想當用戶單擊按鈕啓動時會將計時器向數據庫mysql倒推,儘管用戶關閉瀏覽器倒計時總是會推送到數據庫。

結構的數據庫表:

- id (int) auto_increment; 
- user_id (int); 
- residual_time (int); <--I push it per second, so per second will update it until 0. 

我的服務器使用Linux操作系統Ubuntu的服務器。我是服務器的所有者。

謝謝。

+0

只需保存的開始時間一次,並計算出當前時間顯示的差異。無需在數據庫中進行倒計時。 –

+0

你好@JoachimIsaksson感謝您的回覆,但是如果它沒有倒計時並保存到數據庫系統不知道用戶哪些是最多60分鐘。 –

+1

當用戶點擊開始時,節省時間。在以後的任何時候,當你需要知道剩下多少時間時,只要拿出當前時間並減去開始時間,如果差異超過一個小時,他的時間就會增加。我的意思是,你只需要保存開始時間_once_,而不是每秒都在數據庫中倒數。 –

回答

0

我會做什麼@Joachim建議,並按照這個流程:

  • 與類型爲日期時間與start_time更換residual_time
  • 添加last_update類型爲日期時間。
  • 當用戶單擊開始設置start_timelast_updateNOW() MySQL的函數
  • 編寫一個函數,用AJAX每30運行呢?第二個檢查last_update是否是從start_time過去60分鐘,如果是這樣,停止問卷調查並清除start_timelast_update

現在讓我們假設一個用戶退出並註銷中旬時獲分配的,然後重新登錄才能繼續:

//sudo code example 
//check if start_time is set 
if(isset(start_time)){ 
    //check if last_update time is set 
    if(isset(last_update)){ 
     //calculate the time difference in minutes from previous start_time and last_update time 
     time_diff = last_update - start_time; 
     //if time difference is less than alloted time example 60 minutes 
     if(time_diff < 60 minutes){ 
      //update start_time with current time less time difference for already used time 
      start_time = NOW() - time_diff minutes 
     //if time difference is greater than the allotted time 
     } else { 
      //kill the page with the time expired message 
      die(Your time has expired); 
     } 
    //if last_update time is not set 
    } else { 
     //set start_time to NOW() 
     start_time = NOW(); 
    } 
//if start_time is not set 
} else { 
    //set start_time to NOW() 
    start_time = NOW(); 
} 
+0

我會小心不要每秒更新一次,並且每15至30秒更新一次,除非第二次超時爲強制,否則會給服務器帶來額外的負擔。我們有一個聊天腳本設置爲每三秒更新一次,當我們將其更改爲每15秒時,服務器運行速度會有多快。 – amaster

相關問題