2011-04-26 106 views
0

我甚至不太確定如何提出這個問題,因爲這是一個總體概念問題,但我想我會試一試。創建服務器處理隊列

我想創建一個概念上類似於許多像Vimeo那樣的視頻託管網站的流程。以Vimeo爲例,用戶將視頻上傳到主服務器,視頻添加到處理隊列中,用戶可以在視頻處理過程中自由地做其他事情。過了一段時間,用戶會收到一封電子郵件,說明處理已完成,現在可以訪問視頻,用戶可以隨心所欲地執行任何操作。

我的問題是,這樣的系統如何工作?我的經驗主要是使用PHP,其中所有處理都直接與該頁面中的代碼(或通過包含)綁定。當用戶離開頁面時,你如何處理像這樣的處理?

這是我的猜測...請糾正我。用戶提交的頁面通過某種API鉤子將其文件添加到處理軟件隊列中。可能用C或Java等其他語言編寫的處理器會完成它的工作,然後當它完成時,它會觸發某個PHP頁面的調用,然後向用戶發送一封電子郵件並執行需要完成的任何操作視頻。

我想我只是想了解一些大型網站的「黑匣子」是如何工作的,至少在概念上是如此。有人可以幫我從這裏出去嗎?對不起,這是一個非常模糊的問題。

回答

0

您的問題的一個解決方案是啓動一個新的流程分支,處理視頻處理和郵寄用戶,然後主流程照常繼續。這將阻止主進程停止並迫使用戶等待處理完成。

你可以閱讀有關在PHP創建過程叉這裏:http://php.net/manual/en/book.pcntl.php

再就是這HANDELS視頻處理如ffmpeg的應用:http://www.ffmpeg.org/

,而不必使用一種新的編程語言,你只是執行的cli應用程序,如使用exec函數的ffmpeg:http://php.net/manual/en/function.exec.php

您需要找出一種方法來對進程進行排序,以便服務器不會過載。也許需要一些功能來檢查數據庫中的活動進程,並等待表中的活動進程數少於允許的活動進程數。

+0

非常好。這聽起來正是我正在尋找的。我實際上已經看過ffmpeg和imagemagick,並且可能最終會使用兩者,因爲我希望能夠處理視頻和靜止圖像。好的,有時間去看流程分叉。非常感謝! – 2011-04-26 21:37:52

相關問題