2016-02-25 98 views
1

我现在使用Phalcon作为构建我的服务器的框架,并且我试图在函数中实现循环。Apache PHP循环,它会阻止其他访问服务器?

例如,用户从页面提供输入,页面使用ajax将输入发布到我的服务器的url,然后我的服务器上的url正在做一些可能持续3秒的循环工作。

此外,该页面将使用另一个Ajax发送GET到我的服务器的另一个URL,以获得循环的进度。我将进度存储在会话中。

但是,似乎当服务器正在做循环时,它不能响应其他请求。从我所观察到的,我可以看到第二个Ajax被多次发送,但是我得到的日志仅指示第二个url的函数只被调用一次。

这是Phalcon的限制吗? PHP? Apache的?或者我在配置上做了什么错误?

一些演示代码如下所示:

的Javascript

function query(point) 
{ 
    $.ajax(
    { 
     url: "/work", 
     type: 'POST', 
     dataType: 'json', 
     data: {...}, 
     success: function(data, status) 
     { 
      alert(data); 
      if(progressInterval) 
      { 
       clearInterval(progressInterval); 
       alert("FINISHED"); 
      } 
     }, 
     error: function(err) 
     { 
      if(progressInterval) 
      { 
       clearInterval(progressInterval); 
       ertal("ERR"); 
      } 
     } 
    }); 
    progressInterval = setInterval(function() 
    { 
     alert("Send"); 
     $.ajax(
     { 
      url: "/loadProgress", 
      type: 'GET', 
      dataType: 'text', 
      success: function(data) 
      { 
       alert(data); 
      } 
     }); 
    }, 100); 

}; 

work.php

function work() 
{ 
    for($i=0;$i<3000;$i++) 
    { 
     do some work; 
     store $i in session; 
    } 
    echo "finished"; 
} 

loadProgress.php

function loadProgress() 
{ 
    get $i from session; 
    echo $i/3000; 
} 
+1

问题可能很广泛。取决于你得到的确切设置。如果你的PHP只在单线程环境下运行,那么对我来说它显然不能同时响应多个请求。但这可能是一个完全不同的故事,php/apache在多个CPU内核上的多个线程中运行。 –

+0

这是有道理的。但我发现我错过了session_write_close() –

回答

1

我发现了我在这里错过的东西。 写完会话后,我们必须调用session_write_close()。 或整个服务器将被锁定会话。

相关问题