我有一个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端。
答案 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。我相信一旦你允许它,这将是固定的,应该像以前一样工作。