运行php代码块在背景中

时间:2012-09-04 18:47:07

标签: php iphone ios4 apple-push-notifications

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

<?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);
?>

推动部件出现问题。现在,这个推送通知代码块需要花费大量时间才能执行,因为该表随着大量数据的增长而增长。因此,iPhone应用程序需要等待太长时间才能执行(以获得对iPhone的成功响应)。

因此有没有办法让这个推送部分异步并使用echo向iPhone端发送响应,而不是使用单独的脚本进行推送通知?另请注意,我需要从已保存的记录中获取一些数据以及iPhone端。所以我需要输出才能到达iPhone端。

2 个答案:

答案 0 :(得分:1)

例如,您可以强制PHP使用flush()函数发送响应。 (可能还有其他可能性) 所以你要做的就是在db操作完成时用echo写入输出缓冲区(如果你有100-1000条记录,这些应该非常快),并且在调用flush()函数之后。您的客户应立即得到回复。

另请参阅有关flush()本身的链接,因为您的环境中可能还有其他参数会阻止您的响应尽快到达客户端。 http://php.net/manual/en/function.flush.php

<?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);

&GT;

答案 1 :(得分:0)

实际原因是,我的服务器提供商阻止了苹果APNS使用的端口2195和端口2196。我相信一旦你允许它,这将是固定的,应该像以前一样工作。