在后台运行php代码块

在后台运行php代码块,php,iphone,ios4,apple-push-notifications,Php,Iphone,Ios4,Apple Push Notifications,我有一个php脚本,负责从我的iPhone应用程序中读取一些请求参数。一旦我对它做了一些操作,我会将它们保存在数据库中,并需要使用apple APN发送一些推送通知消息。所以目前它在代码中是这样做的 <?php $param1 = $_POST['param1']; $param2 = $_POST['param2']; //saving part here //push notifications $pushService = new Push

我有一个php脚本,负责从我的iPhone应用程序中读取一些请求参数。一旦我对它做了一些操作,我会将它们保存在数据库中,并需要使用apple APN发送一些推送通知消息。所以目前它在代码中是这样做的

<?php
    $param1 = $_POST['param1'];
    $param2 = $_POST['param2'];

    //saving part here

    //push notifications
    $pushService = new PushService();
    $pushService -> init();
    $pushService -> push($param1, $param2);

    //json response
    echo json_encode(array($success, $dbsavedid);
?>

例如,可以使用flush()函数强制PHP发送响应。(可能还有其他可能实现的目标)
因此,您需要做的是在db操作完成时(如果有100-1000条记录,那么这些操作应该非常快)和调用flush()函数之后,使用echo将数据写入输出缓冲区。你的客户应该马上得到回复

还可以查看关于flush()本身的链接,因为您的环境中可能有其他参数阻止您的响应尽快到达客户端。


实际原因是,我的服务器提供商阻止了苹果APNS使用的端口2195和端口2196。我相信,一旦您允许,它将被修复,并将像以前一样工作。

我们在该表中讨论了多少记录?如果不是数百万,那么您可能会遇到一些严重的模式设计问题。什么是“长时间”?我们说的是几十秒还是根据您的需要超过500毫秒被认为是很长的?这需要时间,因为连接到APN和发送通知需要时间。大约有100-1000条记录,现在需要5-10分钟才能得到响应。它一开始工作得很好,但随着记录数的增加,速度降低了。5-10分钟????我认为在后台运行这些代码隐藏了真正的问题:糟糕的代码/数据结构。当然,你可以在后台运行代码,它会工作得很好,直到你在你的服务器上加载了这么大的负载,整个事情都崩溃了……这并不复杂。我只是从数据库中检索记录并调用APN。对于APNS部分,它需要延迟。我确实尝试过在保存部分之后使用ob_flush()和flush(),在保存部分之后,我也添加了json响应。因此,假设打印输出并启动推送通知。但这对我不起作用。它应该适用于浏览器,但不适用于我的场景。这就是为什么我在iPhone上特别添加了这个问题。这可能是因为iPhone保持与服务器的持续交互,并等待服务器完成交互。是的,应该可以在客户端或服务器端对其进行配置,以便在刷新发生后接收响应。您是在客户端使用NSURLConnection还是其他什么?我使用的是ASIHttpRequest。这是一个3年前开发的老应用程序。刚刚发现这个应用程序时,他们提到如果您以“队列方式”使用它,您可能会有一个requestDidReceiveResponseHeadersSelector回调,它可能与NSURLConnection的didReceiveResponse相同。链接是:您是否也使用ASINetworkQueue进行了尝试?(是的,我一直在编辑我的评论)
<?php
$param1 = $_POST['param1'];
$param2 = $_POST['param2'];

//saving part here

//json response
echo json_encode(array($success, $dbsavedid);

//response should be sent right away, no need for wait on the pushservice operations
flush();

//push notifications
$pushService = new PushService();
$pushService -> init();
$pushService -> push($param1, $param2);