【问题标题】:Ajax requests are served by a single server thread?Ajax 请求由单个服务器线程提供服务?
【发布时间】:2011-04-07 04:07:13
【问题描述】:

我在http://www.iqp.vn 做了一个简单的 ajax 框架,我允许用户发出许多 ajax 请求或取消它们。

但是从测试中我看到,当用户发出一个 ajax 请求来做一些需要很长时间的事情(比如复制/写入一个大文本文件)时,后续请求将等到第一个请求完成后再执行。在客户端上,我看到第二个请求虽然执行速度非常快,但总是在第一个“大”请求完成后返回。

我还使用隐藏表单(iframe)提交来允许用户以ajax风格上传文件,当用户上传大文件时,取消请求(==在客户端重置iframe),然后点击生成另一个请求,我看到后面的请求总是等待第一个上传请求完成。

任何人都可以帮我解决这个问题,我想使用 ajax,并且(如果可能的话)在服务器上使用多线程处理,我可以在客户端上获得一些非常好的效果。

【问题讨论】:

  • 请发布您的一些代码以帮助获得答案....
  • 我会在稍后重构之后公开我的代码
  • 也许当我发现这个问题时,我的网络太糟糕了,现在它可以正常工作了。非常感谢您的帮助。

标签: .net asp.net ajax


【解决方案1】:

Ajax 请求被视为普通请求。你应该检查:

  • ajax 调用是否在等待对方完成后再调用(客户端)?
  • 您是否在服务器上实现了任何锁定机制?
  • 可能是线程池中的所有线程都忙于其他请求

仅供参考,这个jQuery插件可以同时上传多个文件:http://aquantum-demo.appspot.com/file-upload

【讨论】:

  • 我独立进行 ajax 调用,无需在客户端等待。服务器上没有锁,我的网站是新的,所以可能不会超载。我的上传代码(iframe 和隐藏表单)类似于 ajax 表单 jquery 插件。我认为每个 Web 请求都由一个新线程提供服务,因此上传请求不能阻止其他请求。 link to upload如果你在这里上传一个文件,然后点击红叉按钮立即中止它,然后点击一个链接加载一些东西,它会被上传请求阻止:(
【解决方案2】:

此行为取决于您的网络服务器的配置。如果您只为应用程序池分配了一个线程,那么该线程将为每个请求提供服务。

【讨论】:

    猜你喜欢
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 2015-06-22
    • 2015-09-01
    • 2015-09-29
    相关资源
    最近更新 更多