0

嗨,我想用 PHP 和 jquery 实现彗星。彗星在每次页面加载时启动。但是,它会导致网站中任何页面的加载变得非常慢,例如 10 秒,它似乎正在等待对服务器的上一个请求在 if($elapse > 10) 处死掉()但是如果 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 回答