【问题标题】:How to configure PHP or Apache for non blocking http requests如何为非阻塞 http 请求配置 PHP 或 Apache
【发布时间】: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


【解决方案1】:

在 apache.conf 中使用以下指令

StartServers          3
MinSpareServers       5
MaxSpareServers       7

它将产生额外的进程等待并发连接立即为它们服务。 根据需要调整数字。

【讨论】:

  • 如果这是答案,那么这是一个非常糟糕的问题。
【解决方案2】:

我在这个设置中使用 php 脚本中的 for 循环测试了请求

您创建了一个脚本,该脚本通过 HTTP 对内容进行顺序请求,并发现它们是按顺序提供的?

您尚未显示您的代码。尽管可以在单个线程中实现基于事件的套接字客户端,但这将很难编码。即使是这种情况,如果内容没有看起来按顺序处理,我仍然会感到惊讶,这仅仅是因为(在没有分块的情况下)每条消息都是一个完整的请求。 p>

我看到所有并发请求都被阻止了

在很多地方都有互斥锁 - 在每个 php 会话的基础上,在每个 ssl 会话的基础上,甚至在您开始在代码中引入更多互斥锁之前都是明显的候选对象。

你没有提到这是什么版本的 Apache,更重要的是,正在使用什么 mpm 引擎,也没有提到它是如何配置的,也没有提到它运行在什么操作系统上,这让我认为你的测试是可能不是很复杂。

您的结论明确驳斥了网络服务器的一项基本要求——它可以同时处理多个客户端。

如何为 http 请求服务的非阻塞行为配置 apache 或 php

根据您的测试/分析存在缺陷的现有证据,它已经这样做了。

【讨论】:

  • 我从浏览器向这个 php 脚本发送了大约 5 个并发请求,该脚本有一个 for 循环,需要很长时间才能完成
【解决方案3】:

我遇到了类似的问题,发现 Apache 和 PHP 配置正确,但是我的 PHP 脚本阻塞了特定资源。就我而言,是会话文件被锁定,并且每个请求都需要在会话文件再次空闲并可以提供新请求之前完成。 (这里有一篇文章更深入地解释了这个问题:http://konrness.com/php5/how-to-prevent-blocking-php-requests/)一旦我阻止了会话阻塞,我就开始看到人们期望的并行性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多