2012-10-08 193 views
1

我已經構建了一個應用程序,它可以通過FTP與網絡攝像機進行交互,但是在完成之後,我遇到了速度問題。該應用程序結構如下:PHP - FTP流式傳輸所需的體系結構建議

網絡攝像頭 - >的proftp/MySQL的 - > PHP

網絡攝像機的FTP的圖像,它通過的MySQL/PHP管理的服務器的proftp。 PHP充當用戶的客戶端,並從FTP服務器反過來提取最新的圖像。

這個工作,但真的很慢。問題出在Proftp - > PHP方面。使用標準的PHP ftp庫需要大約4秒鐘才能連接到ftp服務器 - >執行目錄列表 - >輸出文件內容。

速度問題是由於過程的驗證部分。從我所看到的無法緩存/存儲/序列化FTP連接,意味着對服務器的每個請求都必須啓動一個新的請求。

這些思想至今我已經..

1)有與永久的FTP連接開while循環運行PHP腳本,但我知道PHP是不是設計來運行這條路。

2)創建一個運行node.js/java等的守護進程,它能夠保持永久的ftp連接打開,並讓PHP與之交互。使用這種方法我擔心的是編寫更多的代碼,這些代碼會複製已經用PHP編寫的認證代碼。

3)???

任何幫助/建議將不勝感激!

+0

如果您正在尋找一些PHP作爲守護進程運行,您可以使用http://prggmr.org/modules/time/api.html運行基於時間的作業,這將允許保持連接在時間。你只需要使用諸如runit之類的東西來管理它。 – Nick

回答

0

在cron作業上安排它是否明智可以使FTP腳本幾乎永久運行,或者在給定的短時間間隔內運行?

+0

FTP腳本實際上並不需要下載任何文件。只是流出文件內容。例如我的圖像網址是,然後我使用setTimer刷新圖像。 –

0

爲什麼你花費額外的時間從ftp讀取圖像?

如果他們在同一臺服務器上,只需通過PHP直接從存儲目錄讀取它們。

如果他們不在同一臺服務器上,利用一些機制來通知php關於最新的圖像(例如通過文本文件,GET變量等)並直接輸出http/ftp圖像。

+0

可能有xxxx數量的攝像頭使用多個ftp服務器,所以FTP服務器將與PHP端分開。我可以使用文本文件/或者我猜想更改每個用戶的主目錄並通過網絡安裝FTP驅動器。 –

+1

通過網絡安裝驅動器比每次開啓連接要快得多。您只需獲得大量的開放式連接。另一個想法是試圖讓攝像頭以某種方式將照片推送到一個PHP腳本,它將接受它們並覆蓋較舊的腳本,而它們仍然保存在特定的ftp上。 –

+0

感謝Martin,我相信這款軟件的新固件版本正是這樣的! –