2015-10-05 58 views
1

我正在創建拍賣有特定結束日期/時間的拍賣網站。 我有一個JavaScript計時器顯示剩餘時間給用戶,當這個倒計時它觸發和事件更新後端MongoDB數據庫說,拍賣已完成,它通知獲勝的用戶,並觸發CLOSE功能。拍賣網站超時事件

您如何建議在拍賣時在瀏覽器中未實際打開的拍賣中這樣Timer事件從不創建此CLOSE事件。

+1

定時器應該與用戶的瀏覽器沒有關係。他們都應該在服務器上完成。 – epascarello

回答

1

我不會推薦這種方法。一旦我在網站上工作,我需要實施拍賣。該項目是在PHP中,所以我寫了一個PHP腳本,它檢查數據庫中的所有拍賣行,並查找具有timeEnd> =當前時間並將其狀態設置爲關閉的那些(拍賣表具有狀態的int列)。

然後我將該腳本設置爲每小時運行一次cron job。所以現在服務器每小時自動運行這個服務器端腳本並檢查過時的拍賣。間隔取決於應用程序的業務邏輯。對於這個項目,拍賣只能結束或開始到每個小時的開始。這種方法比使用觸發服務器腳本的JavaScript代碼好得多。原因之一是你不能相信客戶端代碼。黑客可能可以訪問該JavaScript文件並輕鬆修改它。你不應該讓你的服務器代碼依賴於你的客戶端代碼。

但是,請注意,我的方法並不是最理想的,因爲根據您的db有多少拍賣,服務器腳本仍需要時間來處理它,並可能需要幾秒鐘到幾分鐘時間才能執行它。 例如,如果您有一些拍賣在10:00:00結束,並且服務器腳本在10:00:00開始執行,並且需要40秒才能執行,那麼用戶可能會找到一種方法來對這些拍賣進行​​出價那40秒的時間間隔。您的客戶端代碼只應在10:00:00時注意重置界面,以便用戶無法投標。但是,您還應該確保處理POST請求進行出價的服務器端代碼也應該在繼續之前檢查拍賣結束時間是否過去。如果它只檢查拍賣的狀態(已開啓或已關閉),則拍賣可能會以狀態設置爲已打開而結束。原因是cron工作可能仍在處理拍賣並改變其狀態。 另一種類似的方法是創建在運行系統級別(可能是c或C++應用程序)上運行的服務,該服務將在後臺不斷運行並執行檢查。 第一種方法的好處是大多數託管公司已經提供了設置cron作業。一個例子是Bluehost

設置基於「cron作業」窗口閱讀本post

我希望這使得它更清楚你如何處理拍賣其他信息。

+0

感謝您的詳細解釋。你幫了我很多。我決定和node-cron一起去。 – sawa