使用php运行控制台应用程序的多个实例

时间:2015-11-18 10:56:18

标签: php ajax apache

我正在Windows 7计算机上运行apache服务器。

我制作了两个剧本:

  1. 保存一个html文件,通过ajax多次调用第二个文件并输出结果。
  2. 调用时会加载控制台应用程序,执行简单任务并将结果写回来。
  3. 应用程序使用php exec()执行(也使用proc_open()测试),即使有几个(“同时”ajax调用),一切似乎都能正常工作

    mpm已启用 - 已使用mpm-winnt

    我注意到如果我发出几个ajax调用 - 假设有20个调用 - 只有的apache服务器同时打开最多的6个进程(exe文件)。 即使我在任务管理器中查看进程选项卡,我也只能看到并行执行的应用程序的6个实例。我期待~20 - 似乎其他电话正在等待6 ...的池...

    任何想法为什么?以及如何强制服务器增加此“池”?

    编辑 - 更多信息

    Apache 2.4(x64)

    PHP 5.6(x64) - 用作apache模块。

    httpd.conf

    httpd-mpm.conf

    如果我手动打开程序,它会根据需要加载多次。

    如果我不使用ajax并打开20个加载应用程序的选项卡 - 相同的6个池。

    程序每个实例使用~70mb(峰值)内存。

2 个答案:

答案 0 :(得分:2)

此限制不是服务器端,而是由Web浏览器维护 RFC 建议每个服务器必须设置2个限制,但Web浏览器不符合要求:
我从BrowserScope - Max Connections Per Hostname

中找到了这些信息
Browser | Version | Connections per Hostname | Max Connections
--------+---------+--------------------------+----------------
Chrome  | 32→     | 6                        | 10
Firefox | 26→     | 6                        | 17
IE      | 9→      | 6                        | 35
IE      | 10→     | 8                        | 17
IE      | 11→     | 13                       | 17   
Safari  | 7.0.1→  | 6                        | 17   

答案 1 :(得分:0)

如何连接到服务器(通过AJAX或打开多个选项卡)并不重要。无论如何,它受到Halayem上面提到的限制的影响。

例如,如果您尝试通过其他网络工具(如cURL)调用php脚本,我确定您将看到与发送请求一样多的程序实例。