均衡/标准化Web api呼叫的响应时间

时间:2012-07-12 16:39:27

标签: asp.net asp.net-web-api

我想将每次通话的api响应均衡为2秒。你认为这是正确的做法(vb.net代码)......


Dim timeToSleep = 2000 - Date.Now.Subtract(start).TotalMilliseconds

''执行此处的代码......

如果timeToSleep> 0然后Threading.Thread.Sleep(timeToSleep)


Threading.Thread.Sleep函数是否只阻止此api请求?如果其他人在执行Sleep功能时遇到api请求怎么办?

我应该采取更好的方式吗?

感谢。

2 个答案:

答案 0 :(得分:0)

  

Threading.Thread.Sleep函数是否只阻止此api请求?   如果其他人在睡眠功能时遇到api请求怎么办?   执行?

请记住,虽然您可能会尝试通过使用睡眠来调整api调用的相对输出时间,但是当延迟,处理,其他原因导致缓慢时,时间间隔将无法可靠快速响应时间等都被考虑在内。

  

我应该采取更好的方式吗?

如果有的话,我会说你的api呼叫微调,以便它尽可能快速和轻量级,然后在呼叫时在客户端进行间隔。 (除非我误解你为什么要这样做。)

此外,您可能需要查看长轮询解决方案。

答案 1 :(得分:0)

虽然我可以认为这仅在测试场景(负载测试/用户验收测试)中有用来模拟自然延迟,并且此代码永远不会触及生产,但这将起作用并且您的呼叫将被延迟而其他电话可以运行。 问题是您阻止了哪个主题:

如果您返回普通对象或HttpResponseMessage,您的调用将阻止ASP.NET的线程池,在IIS 7中我认为是1000.更多请求和您的服务器返回503错误。

如果返回Task<T>,则阻止.NET的ThreadPool线程 - 除非您指定使用另一个线程池的调度程序。此池中的数字线程将在minmax之间波动,可以使用ThreadPool的静态方法设置。

我在blog上有一些关于此主题的帖子。