Php extjs4中多个同时运行的ajax请求

Php extjs4中多个同时运行的ajax请求,php,extjs4,Php,Extjs4,问题 我有一个长时间运行的导入作业,从ajax请求开始,可能需要几分钟才能完成请求。当第一个ajax请求运行时,我想查看一下服务器,以了解导入完成了多远,第二个请求将每隔2秒左右完成一次 当我使用Ext.Ajax方法时,请求似乎是链接的——第一个Ajax请求(导入)一直运行到完成,然后第二个(导入更新)被触发 我看到Ext.Ajax是单例的,所以也许这就是原因。因此,我尝试使用Ext.create('Ext.data.Connection')创建自己的连接对象,但不起作用 我的当前请求链是:

问题

我有一个长时间运行的导入作业,从ajax请求开始,可能需要几分钟才能完成请求。当第一个ajax请求运行时,我想查看一下服务器,以了解导入完成了多远,第二个请求将每隔2秒左右完成一次

当我使用
Ext.Ajax
方法时,请求似乎是链接的——第一个Ajax请求(导入)一直运行到完成,然后第二个(导入更新)被触发

我看到Ext.Ajax是单例的,所以也许这就是原因。因此,我尝试使用
Ext.create('Ext.data.Connection')
创建自己的连接对象,但不起作用

我的当前请求链是:

  • 第一个请求-启动
  • 第一个请求-结束
  • 第二个请求-启动
  • 第二个请求-结束
但它应该是:

  • 第一个请求-启动
  • 第二个请求-启动
  • 第二个请求-结束
  • …也许更多的第二次请求
  • 第一个请求-结束
问题

浏览器应该能够处理多个请求,ExtJS内部一定有限制,但我没有找到


更新2011-10-16

回答

问题不是ExtJS-抱歉!这是PHP,我的第一个脚本与会话一起工作,第二个脚本也尝试访问会话。由于PHP会话是基于文件的,会话文件从第一个请求脚本锁定,第二个请求脚本必须等到第一次释放会话锁

我通过在每个x行之后添加到导入过程(第一个脚本)的这段代码解决了这个问题:

 $id = session_id();
 session_write_close();
 sleep(1);
 session_start($id);

因此,它停止并重新加载会话,而另一个脚本能够连接并获取会话信息。

单例或非单例甚至不会改变
Ext.Ajax
的工作方式。我认为这可能是由于编码(您是否等待通话结束?)

顺便说一句,我以前打多个电话从来没有遇到过这个问题。唯一占用调用的是服务器(PHP),它不支持并行处理并导致延迟,并生成这样的模式

  • 呼叫1-启动
  • 呼叫2-启动
  • 调用1在服务器中处理,调用2排队
  • 呼叫1-完成
  • 在服务器中处理调用2
  • 呼叫2-完成
如果调用1比调用2需要更多的时间来处理,则可能是灾难性的

编辑:


我写这封信只是为了让你感受一下它是如何工作的。看看:)花了我半个小时哈哈

编辑:添加了一个漂亮的小图表:)哇!谢谢你,伙计!太棒了,太棒了!你是对的——这是服务器端,我遇到了一个PHP问题(会话锁定),我没有看到,我会用答案更新我的问题。顺便说一句,我不知道JSFIDLE这个很酷的东西,从现在起我将使用它!欢迎把它摊成一堆。这让程序员更容易分享问题和答案。谢谢。只是有一些额外的时间来做一些小的编码:)你传播了JSFIDLE,我已经用它:)+1作为信息。永远不知道会话锁的东西:)这太棒了。我有完全相同的问题,我没有意识到这是会话锁把事情搞砸了。