从同一浏览器调用相同的文件

时间:2014-06-19 13:53:13

标签: php

我有一个PHP脚本需要20秒才能执行,我也在其中使用会话。 代码可以简化为: file1.php

 <?php
 session_start();
 session_write_close();
 sleep(20);
 echo "I'm the first request";
 ?>

file2.php

 <?php
 session_start();
 session_write_close();
 sleep(20);
 echo "I'm the second request";
 ?>

然后,当我调用file1.php并立即调用file2.php时,这正如我预期的那样工作。因此,我不必等待第一个scritp完成sencond以开始执行。

但是,如果我调用file1.php并立即在另一个选项卡中调用file1.php(是,同一个文件),则第二个请求会等到第一个请求完成后再开始。这就是我需要的,在处理上一个请求时多次调用同一个文件。我该怎么做才能解决这个问题?

注意:所有这一切都必须在同一个网络浏览器中完成。

2 个答案:

答案 0 :(得分:0)

从不同的标签中多次请求同一文件不应该有任何问题。您显示的代码不会有并行执行的任何问题。

问题可能是因为您尝试同时访问同一资源并且此资源被第一次访问锁定,因此第二次访问需要等待资源解锁。

如果您提供有关实际代码的更多信息,将更容易确定。

答案 1 :(得分:0)

我有一些与网络服务类似的东西 - A)确定第一个X(我认为是2或3)秒的答案是不存在的。所以我们开始睡觉了。 - B)执行一个带限制的循环并检查我们是否有异常,如果是,则继续循环,但先睡眠X秒,执行X次。如果达到限制,如果它不能正常工作。

$done_retry  = 0;
$max_retry = 6;
$sleep = 3;
// Start with a sleep, because it's sure the webservice doesn't have the payment
// data yet.
sleep($sleep);

// Do loop to try to grab data from soap.
do {
  try {
    $output = $epc_soap->findPayment($arguments);
  } catch(Exception $e) {
    if ($done_retry < $max_retry) {
      sleep($sleep);
      $done_retry++;
      continue;
    } else {
      break;
    }
  }
  break;
} while (TRUE);

已经有一段时间了,所以不确定这是怎么回事,此时,我想我会更喜欢看React http://reactphp.org/