0

こんにちは、コメットを PHP と jquery で実装しようとしています。コメットはページが読み込まれるたびに開始されます。ただし、Web サイトのページの読み込みが 10 秒程度非常に遅くなり、if($elapse > 10) でサーバーへの前のリクエストが die() するのを待っているように見えますが、ajax 接続接続が中止された場合、PHPはさらに実行を停止する必要がありますか? ページのリロードが遅くなる理由は何ですか?

function getPendingCheckin()
    {
        ignore_user_abort(false);
        $iCreatedDate =  $this->input->post("iLastCreateDate");

        $aCheckin = [];
        $prev = time();
        while(! $aCheckin )
        {
            $aCheckin = $this->getData();

            if($aCheckin || connection_aborted() == 1)
            {
                break;
            }
            else
            {
                sleep(1);
                $elapse = time() - $prev;
                if($elapse > 10)
                {
                    die();
                }
            }
        }

        header('Content-type: application/json');
        echo json_encode($aCheckin);
    }

Javascript

        $(window).ready(function(){
             var iLastCreateDate =  $('#iLastCreateDate').val();

             function startGetPendingCheckin()
             {
                    $.ajax({
                       type: "POST",
                       url: "/kc/comet/getPendingCheckin",
                       data: 'iLastCreateDate=' + iLastCreateDate,
                       error : function(msg)
                       {
                           //alert("Error get pending checkin");
                       },
                       success :function(o)
                       {
                           if(o)
                           {
                               //process data
                           }

                           startGetPendingCheckin();
                       }
                   });
             }

            startGetPendingCheckin();
        })
4

1 に答える 1

0

いいえ、php の実行は (常に) 中止されません。ローカル マシンで実行される重いスクリプトであることに気付きました。

セッションが閉じられていないため、php スクリプトへの 2 つの並列リクエストの実行に失敗する場合があります。通常、スクリプトの終了後に自動的に閉じられます。デフォルトの動作 (ロック可能なファイルでのセッション、手動での終了なし) では、同じユーザーから 2 つの同時リクエストを受け取ることはできません。後者は前者によってブロックされ、その終了を待ちます。

ユーザー認証に関するすべてのチェックが済んでいる限り、セッションを閉じることができます。

于 2013-10-31T11:01:24.923 に答える