2012-10-08 178 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,我相信这款软件的新固件版本正是这样的! –