【发布时间】:2012-07-29 04:42:04
【问题描述】:
我有 apache 作为 http 服务器和 php,我从浏览器向这个 php 脚本发送了大约 5 个并发请求,该脚本有一个 for 循环,需要很长时间才能完成,我看到所有并发请求都被阻止并按顺序提供服务。
如何为http请求服务的非阻塞行为而不是顺序服务行为配置apache或php?
I know that Tomcat server http connector can tune using following server parameters
– Threads (maxThreads)
– Keep alive requests (maxKeepAliveRequests)
– TCP Backlog (acceptCount)
– connectionTimeout
– Socket buffers
- Use different connectors (nio, apr, bio)
etc...
php 代码 sn-p 测试了 5 个并发请求,但由 Web 服务器按顺序提供服务(apache 2.2,php 5.3)
<?php
for ($i = 1; $i < 500000; $i++) { //do some processing which takes some time
$sq = sqrt($i);
$val += $sq;
}
echo $val;
?>
【问题讨论】:
-
不太清楚,您要做什么,但我想您应该使用 cronjob 或专用的作业服务器(如 gearman)。
-
其实我希望请求同时处理,而不是顺序处理
-
我明白了,但问题是:为什么?不应从浏览器中调用长时间运行的脚本(通常;当然也有例外)。例如,您可以使用浏览器触发作业(--> 推送到 gearman)并在不同的页面上显示该作业的状态。
标签: php apache nonblocking http-request