Apache2查询并行性

时间:2012-06-17 19:22:33

标签: php ajax parallel-processing apache2

如果我有多个mutliple,同时在域/ somefile.php上进行Ajax javascript查询,

其中somefile.php必须从curl请求(curl_exec)获取响应到domain / somehandler并返回它们

如何处理Apache2的并行性?是否真的比我在域/ somehandler上直接进行Ajax查询要慢?

解释说明

1 个答案:

答案 0 :(得分:0)

how is handled parallelism by Apache2? - 就Apache而言,没有任何实际问题,除非您已经将真正配置得很糟糕,因此它没有足够的进程/线程来处理负载。它更多的是关于硬件资源和网络带宽。这里要注意的事情与Apache无关,实际上与PHP会话有关,我将在下面解释,但首先......

Is it really slower than if I was doing the Ajax queries directly on domain/somehandler? - 是的,不可避免地。这是因为您立即将完成事务所需的HTTP请求数量增加了一倍。您还增加了带宽量和所需的总CPU时间。是否明显更慢以及它是否会导致问题取决于关于您正在做什么的一千个因素,您如何设置您的cURL脚本,两者之间的网络链接有多快后端服务器等等等......


此处出现的问题的答案againagain与PHP驱动的应用程序的并发问题有关,与Sessions有关。许多站点使用会话来跟踪用户数据,登录状态,各种信息,并且没有任何错误的本身(尽管如果可能的话应该避免它们并且与{{完全不兼容) 3}}),但如果处理不当,可能会导致并发问题。

原因是PHP将会话的数据存储在服务器本地文件系统的文件中。会话打开时,文件被锁定以防止通过并发写入损坏会话。这意味着尝试使用会话文件的第二个请求将“阻止”(即等待),直到第一个请求释放它对会话文件的锁定。

大多数时候人们都没有注意到这一点,我在这里看到的最常见的事情是那些试图通过基于PHP的servlet脚本提供文件下载的人,并且当文件是发送。这会导致用户在下载文件时无法从站点加载任何页面。

只要您完成会话数据,就可以通过调用session_write_close()来轻松避免此问题。

...虽然当然如果你没有使用会话,但无论如何都不会影响你。