Php 回声反应后的睡眠

Php 回声反应后的睡眠,php,Php,我有一个API端点,它根据用户的请求执行操作,然后回显json响应。此端点还需要触发通知,但仅在30秒延迟之后。原因是如果用户在该延迟内(通过另一个端点)撤销其请求,这将意味着不应发送通知。以下是相关的代码: // response echo json_encode( array( 'success' => 1, 'updateUser' => $updateUser['ok'], 'updateTarget' => $u

我有一个API端点,它根据用户的请求执行操作,然后回显json响应。此端点还需要触发通知,但仅在30秒延迟之后。原因是如果用户在该延迟内(通过另一个端点)撤销其请求,这将意味着不应发送通知。以下是相关的代码:

// response
echo json_encode(
    array(
        'success' => 1,
        'updateUser' => $updateUser['ok'],
        'updateTarget' => $updateTarget['ok'],
        'updateActivity' => $updateActivity['ok']
    )
);

// send push notification after delay
sendDelayedNotification($user_id, $target_id);
sendDelayedNotification
函数中有
sleep(30)
,用于延迟其执行。然后,该函数检查是否仍存在保证通知的条件


问题是,即使此函数在
echo
语句后启动,它也会延迟响应,请求超时。有没有办法对其进行编码,以使响应不会延迟?

不要使用相同的脚本执行此操作。在整个脚本完成运行之前,不会发送php脚本的响应


您需要使用不同的脚本来发送通知。让您的响应在初始请求时设置数据库记录或创建文件或其他内容。通知脚本将扫描该位置,并根据需要发送通知。取消端点将删除/修改记录,以便通知脚本不会执行。

不要在同一脚本中执行该作业。在整个脚本完成运行之前,不会发送php脚本的响应


您需要使用不同的脚本来发送通知。让您的响应在初始请求时设置数据库记录或创建文件或其他内容。通知脚本将扫描该位置,并根据需要发送通知。取消端点将删除/修改记录,以便通知脚本不会执行。

PHP本质上是同步的

有几个选择:

容易和坏: 1st_script.php

<?php 
    echo json_encode(
        array(
            'success' => 1,
            'updateUser' => $updateUser['ok'],
            'updateTarget' => $updateTarget['ok'],
            'updateActivity' => $updateActivity['ok']
        )
    );

    exec('php 2nd_script.php > /dev/null 2>/dev/null &');
<?php 
    sleep(30);
    doStuff();
<?php
    echo json_encode(
        array(
            'success' => 1,
            'updateUser' => $updateUser['ok'],
            'updateTarget' => $updateTarget['ok'],
            'updateActivity' => $updateActivity['ok']
        )
    );

    submitJobToQueue(data);

PHP本质上是同步的

有几个选择:

容易和坏: 1st_script.php

<?php 
    echo json_encode(
        array(
            'success' => 1,
            'updateUser' => $updateUser['ok'],
            'updateTarget' => $updateTarget['ok'],
            'updateActivity' => $updateActivity['ok']
        )
    );

    exec('php 2nd_script.php > /dev/null 2>/dev/null &');
<?php 
    sleep(30);
    doStuff();
<?php
    echo json_encode(
        array(
            'success' => 1,
            'updateUser' => $updateUser['ok'],
            'updateTarget' => $updateTarget['ok'],
            'updateActivity' => $updateActivity['ok']
        )
    );

    submitJobToQueue(data);

PHP本质上是同步的。你需要的不是。查看异步PHP库,如。在队列系统之间使用多个脚本。队列将能够在执行之前保持30秒(Zend Queue、zeomq、rabbitmq、gearman)。目前我唯一能想到的是刷新响应和延迟通知之间的输出缓冲区。但这并不完整,因为请求仍然处于活动和挂起状态,即使已收到一些输出。PHP本质上是同步的。你需要的不是。查看异步PHP库,如。在队列系统之间使用多个脚本。队列将能够在执行之前保持30秒(Zend Queue、zeomq、rabbitmq、gearman)。目前我唯一能想到的是刷新响应和延迟通知之间的输出缓冲区。但这并不完整,因为即使已收到一些输出,请求仍将处于活动和挂起状态。如何执行不同的脚本?@inorganik并行运行的守护程序或错误的选项是从php执行shell并分离它
exec('php 2nd_script.php>/dev/null 2>/dev/null&')
如何执行不同的脚本?@inorganik并行运行的守护进程或错误的选项是从php执行shell并分离它
exec('php 2nd_script.php>/dev/null 2>/dev/null&')谢谢你的回答。除了“容易和不好”之外,对我来说,设置cron作业比研究/实现整个php框架要简单得多。谢谢你的回答。除了“容易和不好”之外,对我来说,设置一个cron作业似乎要简单得多,而不是研究/实现整个php框架。