每个用户同时有 2 个不同的 php 请求

Posted

技术标签:

【中文标题】每个用户同时有 2 个不同的 php 请求【英文标题】:2 different php request at same time per user 【发布时间】:2011-02-25 16:41:39 【问题描述】:

我有一个有 2 个页面的网站,(home_page.php 和 action_page.php)Action 页面需要 aprx。 2 分钟完全加载(服务器端需要 2 分钟)。但是如果用户在加载动作页面时点击主页链接,浏览器不会转到主页,直到动作页面完全加载。如果主页在新标签页中打开,也是如此。

首先这是什么原因? (bowser ? php ? apache ?) 我怎样才能避免这种情况?

谢谢

【问题讨论】:

【参考方案1】:

很可能是因为会话被锁定。 PHP 将只允许每个会话一个请求,以防止出现问题(覆盖数据等)。见:session_write_close()...

【讨论】:

好的,我刚刚将此功能添加到操作页面的顶部,现在看起来很完美。 也能解决ajax调用的问题吗?如果我对同一页面进行 2 次 ajax 调用,那么第二个 ajax 调用只会在第一次完成处理后才被应答。这仅在启用会话时发生。当我从 php 页面中删除会话时,任何一个调用都可能首先响应。这也是 php 会话的特殊行为吗? 嗯,这不是“特殊”行为,这是非常需要的。有两种方法可以避免该问题。完成会话后立即关闭会话,或者加快页面速度,这样即使有锁,它也只会持续一小部分时间(因此不会被注意到)...... 说我想制作像目录上传器这样的反向 ajax 应用程序。对应用程序的一次 ajax 调用将开始上传可能需要 1-2 小时的目录,因此我们不希望该 ajax 调用长时间响应。第二个 ajax 调用将继续在服务器上轮询已上传文件的数量(在会话中由第一个 ajax 调用不断更新)。问题是第二个 ajax 调用将无法从会话中读取,因为第一个调用很忙,所以第二个调用也很忙。我如何能够使用 session 以便它不会锁定第二个 ajax 调用? 要更新时打开会话,然后在...之后再次关闭...【参考方案2】:

如果页面加载需要 2 分钟,则您已达到典型浏览器的网络超时限制。页面加载时间真的很长。您可能需要考虑生成一个单独的进程来处理长处理。您可以将结果放入数据库、文件等中,并使用轮询来检查是否完成。

当产生一个进程(exec())时,确保你使用nohup,后台它(&)并将错误输出直接到/dev/null,否则它不会与web进程断开连接,web进程会等待它完成。

【讨论】:

【参考方案3】:

另外,如果您正在开发,请查看您的调试设置。我的 .htaccess 中有这个:

php_flag xdebug.remote_enable on
php_flag xdebug.remote_connect_back on
php_flag xdebug.remote_autostart on

这会产生相同的行为。

【讨论】:

以上是关于每个用户同时有 2 个不同的 php 请求的主要内容,如果未能解决你的问题,请参考以下文章

php之Apache压力测试

PHP:对 XML 的 AJAX 请求

同时多个php请求,第二个请求直到第一个完成才完成

如何同时从 oauth 认证两种类型的用户。并且在每个请求标头中都需要两个用户凭据

Instagram 速率限制

Symfony不提供并发请求