0

iPhoneアプリからいくつかのリクエストパラメータを読み取るためのphpスクリプトがあります。いくつかの操作を行ったら、それらをdbに保存し、AppleAPNSを使用してプッシュ通知メッセージを送信する必要があります。したがって、現在、コードではこのように実行されています。

<?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への成功応答を取得するため)。

したがって、このプッシュ部分を非同期にし、プッシュ通知に別のスクリプトを使用する以外に、エコーを使用してiPhone側に応答を送信する方法はありますか?また、保存されたレコードからiPhone側にもデータを取得する必要があることに注意してください。そのため、iPhone側に到達するための出力が必要になります。

4

2 に答える 2

1

たとえば、flush()関数を使用して、PHPに応答を送信させることができます。(他にも達成できる可能性があります)したがって、db操作が終了したとき(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 に答える