0

我有一个 php 脚本,它负责从我的 iPhone 应用程序中读取一些请求参数。一旦我对其进行了一些操作,我将它们保存在数据库中,并且需要使用苹果 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 端。

4

2 回答 2

1

例如,您可以使用 flush() 函数强制 PHP 发送响应。(可能还有其他可能完成)所以你要做的是在你的数据库操作完成时用 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);

?>

于 2012-09-04T19:13:23.683 回答
0

造成这种情况的实际原因是,我的服务器提供商阻止了苹果 APNS 使用的端口 2195 和端口 2196。我相信一旦你允许它,这将被修复并且应该像之前一样工作。

于 2012-09-06T05:32:59.873 回答