php - 基于多线程套接字的服务器-可能在php中?

标签 php multithreading sockets

我们有一堆用php编码的cli样式脚本。

其中一些服务使用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中构建一个多进程应用程序。

但是,这并非无关紧要。如果您在子进程中使用fork,则需要非常小心地管理远程连接,以避免出现问题。 (使用socket_*函数系列而不是fsockopen可以更好地进行控制)

另外,信号往往会中断您的正常程序流程。这当然是正常的,但是在构建PHP时没有考虑到这一点->为某些意外的结果做好准备。

关于php - 基于多线程套接字的服务器-可能在php中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7692026/

相关文章:

c++ - ReleaseSemaphore 不释放信号量

读取套接字时Java中断线程

php - 如何在 Laravel 5.4 中编辑 php 设置以接受大型 csv 文件上传?

c# - 锁定不起作用

multithreading - mongodb 是否使用原子查询更新?

java - 套接字发送和检索

c - 在 C 中通过套接字发送大文件

PHP/MySQL - 连接/联合两个表的结果

php - 无法在mysql中保存值

javascript - 使用 php,JS 强制浏览器在页面加载时使用最新的 JS 和 CSS 文件