2010-11-22 39 views
1

這是問題...我想要用戶上傳一張照片,並且在用戶上傳照片後,我將會有一些過程,來分析這張照片的顏色。但是我不想在php上這樣做......因爲我有一個可以更快運行它的C程序。另外,我不希望用戶等待結果。當計算機分析它時,我會通知用戶,並得到用戶想要的結果。我怎樣才能實現它?任何想法或建議?謝謝。如果我想在Web應用程序中使用本機代碼進行分析,我應該怎麼做?

我對這種想法:

  1. 寫數據庫中的記錄,當用戶上傳成功,例如 file001.jpg,也使一個狀態, 例如,狀態:分析
  2. C程序總是檢查是否有新的上傳 數據庫
  3. 如果有新的上傳,得到的文件001.jpg
  4. 在C程序完成分析例如:完成
  5. php程序使用ajax,不斷拉取數據庫,檢查 的狀態,如果狀態改爲 「完成」,提示並告訴用戶。

您對這個實現有什麼看法?

+1

你想看看`exec()` – 2010-11-22 16:07:31

回答

0

你的方法是完全有效的。本質上,你正在創建一個排隊機制來分析上傳的分析。您的網絡應用程序驗證上傳,然後返回給用戶,將條目寫入數據庫中的隊列。

分析需要作爲持續運行的守護程序運行,或者可能作爲每x分鐘/秒啓動的cron作業運行。在設定的時間間隔內,它會查看作業隊列以查看是否有工作要做,如果有,它會處理它。完成後,守護進程會更新數據庫以將作業標記爲已完成,並可能將與分析有關的新數據寫入不同的表中。

不要忘記,如果您在後臺有多個處理守護進程,您還需要將作業標記爲「已啓動」,以便第二個進程不會重複工作。

當用戶返回頁面時,會反映新狀態。這可以根據您的建議通過Ajax民意測驗「實時」完成,或者您可以考慮使用Comet方法(http://en.wikipedia.org/wiki/Comet_%28programming%29)保持實時連接。

0

如果您不想使用ImageMagick或GD,除非這些照片很大,否則您確實可以使用ImageMagick或GD,因此您處於正確的軌道上。如果C程序足夠快,可以像Pekka所說的那樣做,並使用exec()在初始線程中立即運行C proggy。

我最近剛剛做了這件事,檢查照片是否適用於照片馬賽克。我們用GD做到了這一點,它非常簡單。我們使用resample將圖像縮小到1個像素,然後從中獲取顏色。不是100%完美,但對我們正在使用它的東西非常好。

0

Gearman [http://gearman.org/]可能對您有用。

Gearman提供了一個通用的應用程序框架,用於將工作轉移到其他更適合執行此工作的機器或流程。它允許您並行執行工作,負載平衡處理以及在語言之間調用函數。

它支持C和PHP等語言。您可以使用C作爲Gearman工作人員編寫照片處理腳本。當PHP收到一個文件上傳時,你可以告訴Gearman守護進程處理你的照片。然後,Gearman守護進程將選擇一名可用的工作人員完成工作,並在工作完成後通知您。

它也將加快您的頁面加載時間,因爲客戶端在將數據發送到瀏覽器之前不必等待照片處理完成。

相關問題