我正在致力於圖像託管網站(圖庫的競爭對手),並需要加強我的遊戲。新照片通過FTP上傳或放置在服務器上,並進行索引(快速),然後稍後縮略圖(緩慢)。PHP/MySQL中的異步消息傳遞?
最簡單的實現是允許用戶上傳,然後索引和縮略圖,而他們等待(緩慢的網頁加載)。管理員可以登錄索引,然後縮略圖手動上傳的其他文件(緩慢頁面加載,刷新並可能需要幾小時)。
我現在的實現是用戶上傳原因索引,而他們等待,有時(隨機)整個網站索引在正常頁面負載之上搭載(對用戶造成額外的邊緣延遲)。網站上的網頁指的是縮略圖應該存在的網址。如果用戶請求不存在的縮略圖,則在等待時創建它(「懶惰縮略圖」)。
2的好處是在多核系統上使用所有內核。缺點是,第一次需要一頁新照片加載30x50 MB,並且頁面超時,其中一些圖像完成,其他圖像處理最後的加載。
問題是在這裏實現任務處理的正確方法是什麼?如果它擴展到共享數據庫上的多個服務器,則爲獎勵點。
一個想法如下(可能是亂碼):
我想過做一個數據庫中的作業表:
id INT NOT NULL AUTO_INCREMENT,
priority INT NOT NULL,
worker INT,
workstarted DATETIME,
func CHAR(10) NOT NULL,
args VARCHAR NOT NULL,
PRIMARY KEY(id),
INDEX(priority),
UNIQUE(func,args) -- prevent duplicate jobs if user does F5
然後當工作需要完成,插入一行,並創建一個工作者線程(如果足夠的線程不存在)。然後等待響應,並在作業成功完成或5秒後超時後繼續。如果發生超時,請使用AJAX將內容提供給用戶。
事情我不知道該怎麼做這種方法是:如果足夠的工作線程存在(使用表和心臟跳動?),工作人員如何發送響應(完成時刪除作業和如果失敗,寫另一個表?),請求者如何高效地等待響應或超時(比輪詢數據庫更好?)。根據這些方法,系統可以隨着在不同服務器上運行的員工進行擴展。
這看起來像是要走的路。這是一個成熟的項目,所以我需要檢查和評估0MQ的成熟程度,並確保它不會很快被取代。謝謝! –
祝您的項目順利! :) –