【发布时间】:2011-10-07 19:30:55
【问题描述】:
我们有一堆用 php 编码的 cli cron 样式脚本。
其中一些服务使用 ftp 将数据发送到远程位置。
事情的设置方式,经常发生的事情是:
a) Script start
b) Connect to ftp @ remote location
c) Send data
d) Close ftp connection
e) Terminate script
f) Return to A, repeat, within a short amount of time and send to the same target, but different data.
问题是由于步骤 b 有相当多的开销(阅读:减速),它首先必须连接到 ftp 服务器,登录,确保文件夹存在,如果不创建它等等...我知道我知道,做事的正确方法是将这些转移合并为单一推动...但它远比那复杂。我从这里简化了大约 30-40 步。
所以我希望做的是建立一个这样的系统:
[ CRON CLI SCRIPT ] --->
[ LOCALLY HOSTED SOCKET BASED SERVER THAT KEEPS THE FTP CONNECTIONS OPEN ] --->
[ REMOTE FTP ]
通过以上,我们可以保持本地托管的基于套接字的服务器运行,并且 ftp 连接打开,我们将跳过过程中最长的部分,即 ftp 身份验证相关项目。
虽然在 PHP 中为“一次一个”风格的系统设置这个是相当简单的,但我以前从未做过的就是让它尽可能接近多线程。
在哪里打开套接字(例如,127.0.0.1:10000),并且可以进入多个请求。如果需要,产生“孩子”,建立新的 ftp 连接等。
任何人都可以深入了解如何在 php 中制作这个多线程,或者,如果有其他更好的解决方案吗? Perl 是一种选择。自从我接触到它已经有好几年了(YEARS...),但我相信在一些优秀的文档前几天会让我加快速度以实现它。
【问题讨论】:
-
PHP 不支持线程,但 process forking,这就是您所追求的。另请参阅套接字服务器的现有实现。 pear.php.net/package/Net_Server
标签: php multithreading sockets