2015-08-17 83 views
0

因此,我製作了一個類似adVenture Capitalist的網絡應用程序。我的問題是:即使關閉網頁,是否有一種方法可以使功能持續運行?例如,假設我有5個硬幣,並且有一個功能每小時增加5個硬幣。我退出該頁面(關閉瀏覽器)並在5小時後返回該頁面。從我的初始硬幣價值5加上五個小時中的25個,總共將有30個硬幣。如何在關閉網頁時讓計時器保持運行狀態

我只在一定程度上了解Javascript,HTML,PHP和jQuery,所以如果您可以將其限制爲這些語言。但是,如果有更好或更快的解決方案使用其他語言,請讓我知道。謝謝大家:)

+6

將實際時間存儲在localStorage中,然後重新計算,因爲它存儲了多長時間 – Kaiido

+2

Javascript在瀏覽器中運行,因此您無法在JavaScript中執行此操作,您必須在服務器端執行此操作。 –

+0

@Kaiido會使用localStorage是可靠的嗎?如果用戶清除瀏覽器數據會怎樣? –

回答

1

你可以使用第三方調度服務。如果您可以發出外部HTTP請求,我建議您使用SaturnAPI的Cron。這是一個RESTful API爲您安排回調到您的域,像這樣

curl -X POST \ 
    https://saturnapi.com/cron/jobs \ 
    -H saturnapi-access-key:'YOUR_SATURNAPI_ACCESS_KEY' \ 
    -d dateTimeUTC='2015:09:25 14:30' \ 
    -d dateTimeFormat='YYYY:MM:DD HH:mm' \ 
    -d callbackURL='https://your.verified.domain.com' \ 

你必須在註冊後的API訪問密鑰,也驗證了您的回調域。它接受根據moment.js的各種時間格式。

對於PHP,有許多選項可以進行HTTP POST請求,例如this,thisthis

NOTE:此方法不會阻止服務器或客戶端上的代碼,我認爲這是最好的。要使cron作業重複執行,只需在發生回調時發出另一個HTTP請求。在執行之前,Cron作業也可以取消,如下所示。

curl -X DELETE \ 
    https://saturnapi.com/cron/jobs/YOUR_JOB_ID \ 
    -H saturnapi-access-key:'YOUR_SATURNAPI_ACCESS_KEY' \ 

披露:我爲SaturnAPI

+0

但調度cron ** s(可能會有這個webapp的幾個用戶)只是增加一個計時器可能不是最好的 – Kaiido

+0

@Kaiido在SaturnAPI上的cron作業不會重複發生。他們執行一次就是這樣。它們也可以在執行前取消,所以這是OP的一個可能的解決方案。我將澄清我的回答 – FullStack

+0

您的編輯無助於理解cron如何幫助OP。你的意思是「他們沒有重複發生」?如果你設置一個cron只觸發一次,它只是一個延遲的腳本。但是這怎麼能幫助OP呢?他只需要檢查自上次增加「每小時點」計數器以來的時間。你的解決方案只有在cron每隔一小時才重複更新服務器上的點計數器時纔會起作用,但是然後它需要與此webapp上的用戶一樣多的cron。只需保存一次lastUpdatedTime,然後在重新加載時進行計算。這裏不需要你的真棒API。 – Kaiido

0

工作那麼有什麼fullstack說以及運行與忽略用戶PHP腳本中止設置爲false。只要文件正在循環,它應該在所有密集的目的下繼續運行。

Source

1

沒有必要保留,如果不採取行動,用戶運行的定時器(舉例來說,當用戶甚至沒有在頁面上了)。如果你在計時器中有一些隨機因素,那麼當用戶回來時只做X次。

爲了簡單起見,只需要一個信息是持久的:最後一次「頁面卸載」的得分和完整日期。考慮到適當的功能測試已完成,它可以保存在本地存儲器中,但在服務器端更安全。對於桌面Web應用程序,我更喜歡服務器端存儲,因爲有許多用戶定期刪除本地文件。

我希望這會有所幫助,祝你好運!

相關問題