我有一个调用 WebAPI 的 AngularJS 应用程序。如果我记录发起请求的时间(在我的 angluar Controller 中)并记录 OnActionExecuting 运行的时间(在我的 WebAPI Controller 中的操作过滤器中),我有时会注意到大约 2 秒的间隔。我假设在此过滤器之前没有其他任何东西在运行,这是由于请求被阻止/排队。我认为这是因为如果我删除所有其他数据调用,我就看不到这个差距。
WebAPI 一次可以处理多少个并行请求?我尝试查看 ASP.NET 性能监视器,但找不到可以查看此数据的位置。有人可以对此有所了解吗?
最佳答案
对此没有直接的答案,但最短的答案是......
WebApi 对此没有限制,限制来自您的服务器可以处理的内容以及您运行的代码的效率。
... 但是既然你问了,让我们考虑一些我们可以假设的关于我们的服务器和应用程序的基本事情......
- 并发连接数
典型的服务器因诸如“c10k”之类的问题而闻名 ... https://en.wikipedia.org/wiki/C10k_problem ...因此对并发连接数施加了硬性限制。
假设每个 WebApi 调用都是从网页上的某个 AJAX 调用发出的,这给我们在事情变得糟糕之前限制了大约 10k 的连接。
2.依赖相关的开销
如果我们再考虑相关代码的复杂性,那么您可能会在执行诸如 SQL 查询之类的事情时遇到瓶颈,我经常编写具有运行 10+ db 查询的业务逻辑的 WebApi Controller ,这里的开销可能是您的问题?
- 在开销中馈送
服务器的网络带宽如何? 假设我们为每个调用流式传输 1MB 的数据,用这种大小的消息阻塞 1Gb/s 以太网线路不会花很长时间。
- 处理开销
假设您编写了一个执行复杂计算的 Api(例如复杂 3D 数据的网格生成),您很容易在每次请求时阻塞 CPU 一段时间。
- 超时
假设服务器可以接受您的请求并且请求是异步发出的,那么最大的问题是,您准备等待多长时间的响应?假设这很短,您将减少在每个请求然后需要响应之前有时间解决的问题数量。
...
如您所见,这绝不是一个详尽的列表,但它概述了您所问问题的复杂性。也就是说,我认为 WebApi(框架)没有限制,它真的取决于它周围的基础设施,它有限制以确定什么是可能的。
关于asp.net - WebAPI 生命周期/请求队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583608/