使用fsock-php-Nginx的异步请求不起作用

使用fsock-php-Nginx的异步请求不起作用,nginx,php-5.3,fsockopen,php,Nginx,Php 5.3,Fsockopen,Php,我有一个php脚本,它实现了所描述的公认答案 除非在fclose($fp) 即使是一个空白的for循环也可以完成上述工作 但这有什么意义呢?我想要异步调用:( 让我更痛苦的是,在Apache驱动的环境中,没有上述代码片段,同样的代码运行良好 有人知道Nginx或php-fpm是否对此类请求有问题吗?您要查找的内容只能在具有包含过程控制函数(PCNTL库)的php构建的Linux风格系统上完成 您可以在此处找到它的文档: 具体来说,您要做的是“fork”一个进程。这将创建一个包含所有内存引用的当

我有一个php脚本,它实现了所描述的公认答案

除非在
fclose($fp)

即使是一个空白的for循环也可以完成上述工作

但这有什么意义呢?我想要异步调用:(

让我更痛苦的是,在Apache驱动的环境中,没有上述代码片段,同样的代码运行良好


有人知道Nginx或php-fpm是否对此类请求有问题吗?

您要查找的内容只能在具有包含过程控制函数(PCNTL库)的php构建的Linux风格系统上完成

您可以在此处找到它的文档:

具体来说,您要做的是“fork”一个进程。这将创建一个包含所有内存引用的当前PHP脚本进程的相同副本,然后允许两个脚本同时继续执行

“父”脚本意识到它仍然是主脚本。“子”脚本(或多个脚本,您可以根据需要多次执行)意识到它是子脚本。这允许您在子脚本分离并转变为守护进程后为父脚本和子脚本选择不同的操作

要做到这一点,您可以使用以下方法:

$pid = pcntl_fork(); //store the process ID of the child when the script forks
if ($pid == -1) {
     die('could not fork'); // -1 return value means the process could not fork properly
} else if ($pid) {
     // a process ID will only be set in the parent script. this is the main script that can output to the user's browser
} else {
     // this is the child script executing. Any output from this script will NOT reach the user's browser
}
这将使脚本能够派生出一个子进程,该子进程可以在父脚本输出其内容并退出后继续执行(或长时间执行)


您应该记住,这些函数必须编译到您的PHP版本中,并且绝大多数托管公司都不允许在其服务器上访问它们。为了使用这些函数,您通常需要有一个虚拟专用服务器(VPS)或者一个专用的服务器。即使是云托管设置通常也不会提供这些功能,就好像使用不当(或恶意)一样他们可以很容易地让服务器崩溃。

我不知道php有异步支持。不,它没有。我想启动一个脚本,而不等待它的响应或完成。尝试发送请求,不关闭它,不读取它的响应如果我这样做,我会等待其他脚本完成,对吗?
$pid = pcntl_fork(); //store the process ID of the child when the script forks
if ($pid == -1) {
     die('could not fork'); // -1 return value means the process could not fork properly
} else if ($pid) {
     // a process ID will only be set in the parent script. this is the main script that can output to the user's browser
} else {
     // this is the child script executing. Any output from this script will NOT reach the user's browser
}