Php 另一个父级是否可以关闭异步持久连接

Php 另一个父级是否可以关闭异步持久连接,php,persistent-connection,Php,Persistent Connection,我制作了一个cron文件,它将不同的作业调用为异步的,并最终将睡眠者调用为异步的。睡眠者睡眠1分钟,然后调用cron脚本异步,等等 但我想重建系统,将最后一个“文件指针”存储在一个文件中,并在以后使用它来停止进程。那是可以制造的东西吗 代码示例: sleeper.php sleep(60); call($_SERVER['HTTP_HOST'], dirname($_SERVER['REQUEST_URI']).'/cron.php', ( DEBUG ? 'write_log' : '' )

我制作了一个cron文件,它将不同的作业调用为异步的,并最终将睡眠者调用为异步的。睡眠者睡眠1分钟,然后调用cron脚本异步,等等

但我想重建系统,将最后一个“文件指针”存储在一个文件中,并在以后使用它来停止进程。那是可以制造的东西吗

代码示例:

sleeper.php

sleep(60);
call($_SERVER['HTTP_HOST'], dirname($_SERVER['REQUEST_URI']).'/cron.php', ( DEBUG ? 'write_log' : '' ) );
cron.php

foreach ($jobs as $job)
{
    $job = parse_url($job);
    call(dispatch_generic_job($job['port'], $job['path'], $job['port'], ( LOG_JOBS ? 'write_job' : '' ) );
}

call($_SERVER['HTTP_HOST'], dirname($_SERVER['REQUEST_URI']).'/sleeper.php', ( DEBUG ? 'write_log' : '' ) );
object.php:

function call($server, $url, $port = 80, $log)
{
    @set_time_limit(0);

    $timeout = 10;
    $rw_timeout = 86400;
    $error_number = '';
    $error_string = '';

    $con = @fsockopen($server, $port, $error_number, $error_string, $timeout);
    if (!$con)
    {
       $log($error_string.' ('.$error_number.') Ref: '.$server.':'.$port.$url);
       return false;
    }
    $qry = 'GET '.$url.' HTTP/1.1'."\r\n";
    $qry .= 'Host: '.$server."\r\n";
    $qry .= 'User-Agent: test'."\r\n";
    $qry .= 'Connection: Close'."\r\n\r\n";

    stream_set_blocking($con, false);
    stream_set_timeout($con, $rw_timeout);
    fwrite($con, $qry);

    if ( $log )
    {
        while ( !feof($con) )
        {
            $line = fgets($con, 128);
            if ( !empty($line) )
            {
                $log('Status: '.rtrim($line).' Ref: '.$server.':'.$port.$url);
                break;
            }
        }
    }

    return True;
}
*更新***
通常,当您使用完持久连接后,会将其关闭。但是因为我使用异步(stream_set_blocking)持久连接(fsockopen),而不关闭,所以脚本可以在没有父级的情况下每分钟继续循环。(Cron.php调用Slepper.php调用Cron.php等)

我想重建脚本来存储最后一个“文件指针”,以便以后可以使用它来关闭持久连接

我读了很多书,但没有找到一种方法。

示例:

object.php

function call($server, $url, $port = 80, $log)
{
    ......

    $con = @fsockopen($server, $port, $error_number, $error_string, $timeout);
    if (!$con)
    {
       $log($error_string.' ('.$error_number.') Ref: '.$server.':'.$port.$url);
       return false;
    }

    file_put_contents(__DIR__.'/steam', $con); // Obviously can not be performed

    ......
}
stop.php

$lats_con = file_get_contents(__DIR__.'/steam');
fclose($lats_con);
echo 'Cron is stopped';


我现在读了大约5遍,我不确定你想达到什么目的。当你使用完它后,关闭一个持久连接。但由于我使用异步持久连接而不关闭它,因此脚本在没有父级的情况下每分钟都会继续循环。(Cron.ph调用Slepper.php调用Cron.ph等)我想重建脚本以存储最后一个“文件指针”,以便稍后使用它关闭持久连接。我已经用一个例子编辑了这个主题。首先,对于持久连接,您需要pfsockopen(),这是正确的。为什么不给它一个合理的超时时间,这样它就会自动结束呢?你是对的,但是脚本应该能够在没有父脚本的情况下继续循环。我有另一种方法来停止它,但为了保存代码,我希望能够使用fclose()停止它;您不能仅使用指向该套接字连接的指针来存储文件,您认为该文件将包含哪些纯文本?正如我所说,你需要重新建立连接,然后你就可以关闭它。