2011-05-11 46 views
3

我對此有幾點想法,但這裏是我需要做的,只是想要一些第二個意見。如何檢查拍賣是否完成 - 觸發PHP處理

我正在寫一個PHP/SQL的小型拍賣網站,但我碰到了一個障礙。

當一個項目完成後,就像eBay一樣,我需要能夠告訴它已完成並將電子郵件發送給誰贏了它,誰賣了它。

我能想到的唯一方法是安排一段代碼,以檢查哪些拍賣已結束,但肯定有更好的方法?

+0

我假設你希望有某種傾聽者......我沒有意識到任何事情,並且只是每隔一分鐘就安排一次支票,但是......我對自己的回答沒有足夠的信心把它作爲一個「答案」。 – Dave 2011-05-11 12:44:28

+0

eBay是否已經發送此信息? – Emyr 2011-05-11 13:12:14

+0

這是正確的,它是我需要的一種傾聽者......但是我不能每隔1分鐘運行一次,因爲這太慢了,因爲有人可能會馬上支付......如果網站每1000個拍賣會就會運行10次秒不會工作,因爲腳本可能需要60秒才能運行 – Lee 2011-05-11 14:01:44

回答

1

請分享根據投標結束日期(如何知道投標結束日期)詢問出價最高者的SQL腳本,並將產品獎勵給出價最高的人

0

我會設置一個cron作業來運行每10-20-30-60分鐘等發送電子郵件和更新拍賣詳情。

如果你的腳本很快,每分鐘左右運行它可能會沒問題。

請注意,許多共享主機只會允許您每小時發送一定數量的電子郵件。

做這些郵件需要被立即發送出去?

+0

可能的重複如何解決問題如果他希望網站更新網站上的「結束」拍賣? – boug 2011-05-11 12:58:34

+0

該腳本將更新數據庫以及發送電子郵件。當腳本發現完成拍賣時,它會將拍賣更新爲「結束」。顯然,需要刷新前端才能看到結果,但它會自動完成。 – HGPB 2011-05-11 13:03:37

+0

如果您認爲人們只是盯着拍賣等待它說「已結束」,您可以使用ajax在後臺輪詢數據庫。所以你可以得到一個Ajax來幫助你確定拍賣結束,動作電子郵件發送和其他拍賣更新。 – HGPB 2011-05-11 13:08:29

0

我可以看到你正在努力才達到2可能出現的問題和目標:

  • 視覺:你想,當用戶瀏覽您的網站,而不更新或刷新頁面,它會不斷更新頁面,以便如果試聽結束,則會顯示類似「試聽結束,該項目會......」。 解決方案:您應該使用Javascript和AJAX。 (我假設你已經在使用它進行倒計時或什麼的)。每5秒發一個AJAX調用(可能夠用)並更新內容。
  • 實踐:您希望如果試聽結束,用戶將無法加入。 解決方案:你可以用PHP和mysql來完成。您可以創建一個字段,在其中存儲試聽開始時間戳,然後製作一個簡單的if (time() >= ($timestamp + $duration)) {}(其中$timestamp是試聽的開始,$duration是試聽的持續時間),以阻止可能的不良用戶試圖做到這一點。
+0

我想你誤解了這個問題,它是關於一個在拍賣完成時調用的聽衆=>在特定日期和時間發起的一段代碼。 – 2011-05-11 13:32:12

+0

@Matthieu,屬於第一個可能的問題。你必須爲此使用AJAX和Javascript。你必須尋找試鏡的開始,然後繼續檢查背景是什麼時間以及試鏡是否結束。 – Shoe 2011-05-11 13:34:45

+0

@Charliepiga不,他正在談論服務器端,處理拍賣......如果沒有人訪問拍賣頁面,它會完成。它不會被處理。 – 2011-05-11 13:40:40

3

該解決方案可以在多個部分:

  • 腳本經由的Cron推出(每5分鐘可能是好的,甚至更少......)。它檢測到已完成的拍賣,並且將它們放入隊列

  • 腳本,隊列中的持續相當多運行,那工藝項目。

需要注意的是:

  • 你必須確保拍賣仍顯示頁面之前開啓! (一個簡單的測試)人們在關閉後無法加入。
  • 對於每個腳本,您可以使用PHP,或任何其他語言

優勢

  • cron作業是非常快的,在資源低,如果有很多的拍賣進行處理,沒有風險它會並行運行(然後衝突)
  • 隊列系統確保您的系統不會因爲發生的事情太多而崩潰......它將以最快的速度處理隊列儘可能,但如果速度不夠快,該網站將c繼續運行。但是,您可以在拍賣結束幾小時或幾天後發送電子郵件。但是「限制」方式更具有可預測性,並且不會導致系統崩潰。
  • 您可以使用隊列的多線程處理,分佈式處理將來擴展它...這是一個可伸縮的體系結構。
  • 這個建築很有趣。

其它附加信息:

  • 關於守護程序腳本,我不必連續運行。你可以做的是:在cron作業結束時,如果隊列中有項目,那麼它會檢查另一個腳本(處理)是否正在運行。如果是,則退出。如果另一個腳本沒有運行,它會啓動它...
  • 守護進程腳本將一個項目從隊列中取出並處理它。最後,如果隊列中還有項目,它會處理它,否則它會退出。
  • 有了這個系統,一切都是最佳的,每個人都彼此相愛!

要檢查其他腳本是否正在運行,您可以使用一個文件並在其中寫入「1」或「0」(=正在運行/未運行)。第一個腳本讀取它,第二個腳本寫入它...您也可以使用數據庫來完成它。或者你也可以使用系統工具或shell命令...

+0

這是正確的,它是我需要的一種傾聽者......但是我不能每隔1分鐘運行一次,因爲這太慢了,因爲有人可能會馬上付錢......如果網站每1000個拍賣會就會運行10次秒不會運行,因爲腳本可能需要60秒才能運行 – Lee 2011-05-11 14:01:38

+0

不,您是否閱讀我的答案?在網站上,您需要檢查拍賣是否完成。如果是這樣,你不能允許任何行動。處理(決定誰勝出,發送電子郵件,處理付款......)是在後臺異步完成的。 1000個拍賣將在後臺一次處理一個,它不會減慢你的網站。 **我不明白你在哪裏看到問題**。 – 2011-05-11 14:06:56

+0

我發現問題的原因是腳本需要60秒才能完成1000次,那麼1000次完成的結果會在60秒內發生什麼? – Lee 2011-05-11 14:08:48

相關問題