在PHP中控制不同脚本之间的应用程序流

在PHP中控制不同脚本之间的应用程序流,php,scalability,Php,Scalability,我有一个php脚本,它接受POST请求作为web服务的侦听器,然后将所有数据处理到两个最终数组, 我正在寻找一种方法来启动第二个脚本,以获取这些序列化数组并进行更多处理。 include()对我没有好处,因为我实际上希望在传递数据后“释放”或“结束”第一个脚本 我们将一如既往地感谢您的帮助:) 编辑-确定,看起来队列可能是解决方案!我以前从未做过类似的事情,没有任何例子或参考?需要立即发生吗?否则,您可以设置一个cronjob,每X分钟执行一次。您必须创建某种队列,其中第一个脚本将“请求”粘贴到

我有一个php脚本,它接受POST请求作为web服务的侦听器,然后将所有数据处理到两个最终数组, 我正在寻找一种方法来启动第二个脚本,以获取这些序列化数组并进行更多处理。 include()对我没有好处,因为我实际上希望在传递数据后“释放”或“结束”第一个脚本

我们将一如既往地感谢您的帮助:)


编辑-确定,看起来队列可能是解决方案!我以前从未做过类似的事情,没有任何例子或参考?

需要立即发生吗?否则,您可以设置一个cronjob,每X分钟执行一次。您必须创建某种队列,其中第一个脚本将“请求”粘贴到第二个脚本。cronjob然后处理队列中的请求。

是否需要立即执行?否则,您可以设置一个cronjob,每X分钟执行一次。您必须创建某种队列,其中第一个脚本将“请求”粘贴到第二个脚本。cronjob然后处理队列中的请求。

我会在一个请求中完成所有操作。它减少了延迟,使整个操作更加高效

请记住,您可以有一个长时间运行的请求,但仍然可以为其他请求提供服务。Apache将生成另一个php进程来处理来自webservice的另一个请求,即使第一个请求尚未完成。只要脚本不锁定共享资源(数据库文件等),就可以正常工作


也就是说,您应该使用调用第二个脚本。然后发布未序列化的数组。cUrl会处理剩下的事情。

我会在一个请求中完成这一切。它减少了延迟,使整个操作更加高效

请记住,您可以有一个长时间运行的请求,但仍然可以为其他请求提供服务。Apache将生成另一个php进程来处理来自webservice的另一个请求,即使第一个请求尚未完成。只要脚本不锁定共享资源(数据库文件等),就可以正常工作


也就是说,您应该使用调用第二个脚本。然后发布未序列化的数组。cUrl将处理其余部分。

您应该养成编写php脚本的习惯,这些脚本只是一组函数(本身没有自动运行的脚本)。通过这种方式,您可以在所谈论的脚本顶部包含一个脚本文件,然后调用执行所需操作的函数

例如:

<?php
include('common_functions.php');
$array_1 = whatever_you_do_with_post_values();
$array_2 = other_thing_you_do_with_post_values();
// this function is located in 'common_functions.php'
do_stuff_with_arrays($array_1,$array_2); 
?>

事实上:

为了和我说的一致:

<?php
include('common_functions.php');
do_your_stuff();
function do_your_stuff() {
    $array_1 = whatever_you_do_with_post_values();
    $array_2 = other_thing_you_do_with_post_values();
    // this function is located in 'common_functions.php'
    do_stuff_with_arrays($array_1,$array_2); 
}
?>


显然,你应该使用更好的函数和变量名,哈哈。

你应该养成只编写函数集合的php脚本的习惯(本身没有自动运行的脚本)。通过这种方式,您可以在所谈论的脚本顶部包含一个脚本文件,然后调用执行所需操作的函数

例如:

<?php
include('common_functions.php');
$array_1 = whatever_you_do_with_post_values();
$array_2 = other_thing_you_do_with_post_values();
// this function is located in 'common_functions.php'
do_stuff_with_arrays($array_1,$array_2); 
?>

事实上:

为了和我说的一致:

<?php
include('common_functions.php');
do_your_stuff();
function do_your_stuff() {
    $array_1 = whatever_you_do_with_post_values();
    $array_2 = other_thing_you_do_with_post_values();
    // this function is located in 'common_functions.php'
    do_stuff_with_arrays($array_1,$array_2); 
}
?>


显然,你应该使用更好的函数和变量名,哈哈。

是的。自动运行的脚本是一个需要维护的噩梦,很容易失败。@kyle:php是一个单通道解析器。注意代码中的任何错误;)@拜伦:没有。如果你指的是我在函数声明之前调用它的事实,我总是这样做,这从来都不是问题。如果这不是你所指的,请告诉我,因为我会发疯的知道有什么问题,我看不到它o_0。更好的是,使用类和自动加载。那么您就不必管理include。@Kyle也许新版本的php已经解决了这个问题(我在php3中学习了一些约定)。或者我把javascript、php、tcl和perl混合在一起了。在正常的一周里,我会全部使用:染料。自动运行的脚本是一个需要维护的噩梦,很容易失败。@kyle:php是一个单通道解析器。注意代码中的任何错误;)@拜伦:没有。如果你指的是我在函数声明之前调用它的事实,我总是这样做,这从来都不是问题。如果这不是你所指的,请告诉我,因为我会发疯的知道有什么问题,我看不到它o_0。更好的是,使用类和自动加载。那么您就不必管理include。@Kyle也许新版本的php已经解决了这个问题(我在php3中学习了一些约定)。或者我把javascript、php、tcl和perl混合在一起了。在正常的一周里,我会全部使用它们:不总是一个好主意。如果第二个进程很慢,并且在http请求结束之前不需要结果,那么您也可以将作业排队,并使用一些后端进程来处理队列。保持http连接打开,特别是在mod_php下(这意味着apache正在mpm_prefork中运行),可以很快占用可用内存。一个经过良好调优的mod_php apache服务器将有有限数量的可能的子进程。如果对其进行了良好的调优,您将耗尽侦听器,服务器将停止接受请求。否则,您将耗尽内存并导致死锁。这并不总是一个好主意。如果第二个进程很慢,并且在http请求结束之前不需要结果,那么您也可以将作业排队,并使用一些后端进程来处理队列。保持http连接打开,特别是在mod_php下(这意味着apache正在mpm_prefork中运行),可以很快占用可用内存。一个经过良好调优的mod_php apache服务器将有有限数量的可能的子进程。如果对其进行了良好的调优,您将耗尽侦听器,服务器将停止接受请求。如果没有,您将耗尽内存并出现死锁。+1因为它实际上回答了这个问题(似乎是关于在结束http请求后进行处理的问题)巴特-谢谢您的回答,您能举个例子吗?或者给我指一个推荐人?我从来没做过什么