【发布时间】:2011-10-26 19:43:04
【问题描述】:
问题
我有一个长期运行的导入作业,我从一个 ajax 请求开始,可能需要几分钟才能完成请求。当第一个 ajax 请求正在运行时,我想查看服务器以了解导入的进度,第二个请求将每 2 秒左右完成一次。
当我使用 Ext.Ajax 方法时,请求似乎被链接了 - 第一个 ajax 请求(导入)运行直到完成,然后第二个(导入更新)被触发。
我看到 Ext.Ajax 是单例的,所以也许这就是原因。所以我尝试使用Ext.create('Ext.data.Connection') 创建我自己的 Connection 对象,但它不起作用。
我的当前请求链是:
- 第一个请求 - 开始
- 第一个请求 - 结束
- 第二个请求 - 开始
- 第二个请求 - 结束
但它应该是:
- 第一个请求 - 开始
- 第二个请求 - 开始
- 第二个请求 - 结束
- ...也许更多的第二个请求
- 第一个请求 - 结束
问题
浏览器应该可以处理多个请求,ExtJS里面肯定有限制但是我没发现?
2011 年 10 月 16 日更新
回答
问题不在于 ExtJS - 抱歉!它是 PHP,我的第一个脚本与会话一起使用,第二个脚本也尝试访问会话。而且由于 PHP 会话是基于文件的,会话文件被第一个请求脚本锁定,第二个请求脚本必须等到第一次释放会话锁定。
我在每 x 行之后添加到导入过程(第一个脚本)中的这段小代码解决了这个问题:
$id = session_id();
session_write_close();
sleep(1);
session_start($id);
因此它停止并重新加载会话,并且其他脚本能够挂接并获取会话信息。
【问题讨论】:
-
+1 获取信息。永远不知道会话锁定的事情:)
-
这太棒了。我遇到了完全相同的问题,但我没有意识到这是会话锁定搞砸了。